在像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}
-
- public static void main(String[] args) {
- for(Color s : Color.values()) {
-
- System.out.println(s);
- }
- }
- }
console results
注意事項已經在code中注釋出,還要說明一點的是,這個java文件編譯完成后不只有一個EnumDemo.class,還會有一個EnumDemo$Color.class,奇怪吧!
Another e.g.
java 代碼
- public class EnumDemo {
- private enum Color {red, blue, green}
-
- public static void main(String[] args) {
- Color s = Color.blue;
-
- switch (s) {
- case red:
- 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;
-
-
- public static Color getColor(String s){
- if(s.equals("red flag")){
- return red;
- } else if(s.equals("blue flag")){
- return blue;
- } else {
- return green;
- }
- }
- }
-
- 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);
- }
- }