Java 列舉(Enum)範例

Java 列舉(Enum)範例

Enum:  Day.SUNDAY。。Day.MONDAY

Java上比較像C的structure應該就是enum,如果主力不是Java而不常在使用可能會忘記它的用法,這裡直接列出範例來幫助記憶,範例是由The Java™ Tutorials中整理出來的。

基本範例

沒有特別需求,一般使用如下的範例:

//-----------start-----------
    public enum Day {
        SUNDAY,
        MONDAY,
        SATURDAY
    }
//------------end------------

列舉Day名稱

透過values取得所有項目,再利用方法nametoString 將Day中的名稱印出來:

//-----------start-----------
        for(Day day: Day.values())
            System.out.println(day.name());
    }
//------------end------------

//-----------start-----------
        for(Day day: Day.values()) {
            System.out.println(day.toString());
        }
//------------end------------

輸出結果:

    SUNDAY
    MONDAY
    SATURDAY

進階範例

其實Enum是利用Class、Interface加上Compiler自動生成一些程式碼所組成的,所以你可以在使用你建立的enum之前定義它的變數、方法…等。 下面範例可以指定你定義的enum它實際代表的值為何:

//-----------start-----------
public enum Day {
    SUNDAY(4),
    MONDAY(5),
    SATURDAY(11);

    private int value;

    private Day(int value) {
        this.value = value;
    }

    public int getValue() {
        return this.value;
    }
}
//------------end------------

列舉Day名稱代表的值

上述程式有實作代表數值部分,如此一來能使用Day.SUNDAY.getValue取得你定義的值(SUNDAY=11),列舉整個名稱代表的值:

//-----------start-----------
        for(Day day: Day.values()) {
            System.out.println("name:" + day.name() + "\nvalue:" + day.getValue());
        }
//------------end------------

輸出結果:

name:SUNDAY
value:4
name:MONDAY
value:5
name:SATURDAY
value:11

覆寫列舉中的方法

前面介紹的為基本的範例,另外你也可以Override覆寫方法像是toString

//-----------start-----------
@Override
public String toString() {
    switch(this) {
        case SUNDAY:
            return "Sunday: " + value;
        case MONDAY:
            return "Monday: " + value;
        case SATURDAY:
            return "Saturday: " + value;
        default:
            return null;
    }
}
//------------end------------

列舉 Day並使用toString

使用覆寫toString的新方法印出名稱(第一個字母大寫)、代表的值。

//-----------start-----------
        for(Day day: Day.values()) {
            System.out.println(day.toString());
        }
//------------end------------

輸出結果:

Sunday: 4
Monday: 5
Saturday: 11