個人感覺枚舉很簡單,Java最開始的時候是沒有枚舉的,后來應(yīng)用廣了,加入了枚舉類型。枚舉類型使用enum關(guān)鍵字聲明,其實枚舉就是一個類,都是類庫中Enum類的子類(java.lang.Enum)。在JDK 1.5以前并沒有枚舉,我們一樣可以自己定義出枚舉。就如同我們使用單態(tài)設(shè)計模式一樣。以下是用一個類來模擬enum,讓我們更好的理解enum的原理。
源碼:
public class EnumDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EnumColor myColor = EnumColor.RED;
//打印myColor
System.out.println(myColor);
//打印在第幾個位置
System.out.println(myColor.ordinal());
//使用valueOf方法獲得EnumColor
EnumColor vColor = EnumColor.valueOf("BLUE");
System.out.println(vColor);
}
}
public abstract class EnumColor {
// 記錄創(chuàng)建實例的數(shù)量
static int count;
// 第一步我們需要將構(gòu)造方法私有,這樣我們將不能new出一個EnumColor對象
private EnumColor() {
}
// 這里我們創(chuàng)建幾個自己的對象
static EnumColor RED = new EnumColor() {
@Override
public String toString() {
return "紅色";
}
@Override
public int ordinal() {
return 0;
}
};
static EnumColor YELLOW = new EnumColor() {
@Override
public String toString() {
return "黃色";
}
@Override
public int ordinal() {
return 1;
}
};;
static EnumColor GREEN = new EnumColor() {
@Override
public String toString() {
return "綠色";
}
@Override
public int ordinal() {
return 2;
}
};;
static EnumColor BLUE = new EnumColor() {
@Override
public String toString() {
return "藍色";
}
@Override
public int ordinal() {
return 3;
}
};;
// 返回枚舉常量的序數(shù)(它在枚舉聲明中的位置,其中初始常量序數(shù)為零)
public abstract int ordinal();
//返回枚舉常量的名稱,它包含在聲明中。
public abstract String toString();
//返回帶指定名稱的指定枚舉類型的枚舉常量。
public static EnumColor valueOf(String name){
if (name.equals("RED")) {
return RED;
} else if(name.equals("YELLOW")){
return YELLOW;
}
else if(name.equals("GREEN")){
return GREEN;
}
else if(name.equals("BLUE")){
return BLUE;
}
return null;
}
}
使用枚舉的范例:
很簡單,和上面的做對比,通俗易懂。枚舉可以定義方法,構(gòu)造方法,和成員變量,理解成類就可以了。
public class ColorShow {
enum Color {
RED(255, 0, 0), GREEN(0, 255, 0), YELLOW(255, 255, 0), BLUE(0, 0, 255);
// 聲明顏色值
int R, G, U;
// 枚舉也可以有構(gòu)造方法
Color(int R, int G, int U) {
this.R = R;
this.G = G;
this.U = U;
}
}
/**
* @author WuDi
*/
public static void main(String[] args) {
Color myColor = Color.BLUE;
//默認的toString方法
System.out.println(myColor);
//枚舉常量的序數(shù)
System.out.println(Color.GREEN.ordinal());
//valueOf取得枚舉常量
System.out.println(Color.valueOf("YELLOW"));
}
}