在像C這樣強調數據結構的語言里,枚舉是必不可少的一種數據類型。然而在java的早期版本中,是沒有一種叫做enum的獨立數據結構的。所以在以前的java版本中,我們經常使用interface來simulate一個enum。
java 代碼
public interface Color {
static int RED = 1;
static int GREEN = 2;
static int BLUE = 3;
}
雖然這種simulation比較麻煩,但在以前也還應付的過去??墒请S著java語言的發展,越來越多的呼聲要求把enum這種數據結構獨立出來,加入到java中。所以從java 1.5以后,就有了enum,這也是這篇blog要學習的topic。
學習的最好方式就是例子,先來一個:
java 代碼
public class EnumDemo {
private enum Color {red, blue, green}//there is not a ";"
public static void main(String[] args) {
for(Color s : Color.values()) {
//enum的values()返回一個數組,這里就是Seasons[]
System.out.println(s);
}
}
}
console results
red
blue
green
注意事項已經在code中注釋出,還要說明一點的是,這個java文件編譯完成后不只有一個EnumDemo.class,還會有一個EnumDemo$Seasons.class,奇怪吧!
Another e.g.
java 代碼
public class EnumDemo {
private enum Color {red, blue, green}//there is not a ";"
public static void main(String[] args) {
Color s = Color.blue;
switch (s) {
case red://notice: Seasons.red will lead to compile error
System.out.println("red case");
break;
case blue:
System.out.println("blue case");
break;
case green:
System.out.println("green case");
break;
default:
break;
}
}
}
這個例子要說明的就是case的情況。
就這么多嗎,當然不是,我們的enum結構還可以定義自己的方法和屬性。
java 代碼
public class EnumDemo {
private enum Color {
red, blue, green;//there is a ";"
//notic: enum's method should be "static"
public static Color getColor(String s){
if(s.equals("red flag")){
return red;
} else if(s.equals("blue flag")){
return blue;
} else {
return green;
}
}
}//there is not ";"
public static void main(String[] args) {
EnumDemo demo = new EnumDemo();
System.out.println(demo.getFlagColor("red flag"));
}
public Color getFlagColor(String string){
return Color.getColor(string);
}
}
Ok,so much for enum. Isn't it simple?