Java Enum 範例

Java 列舉(Enum)範例

Enum:  Day.SUNDAY。。Day.MONDAY

Enum中文會翻成列舉,它的用途是定義常數與名稱的關系,在程式直接使用名稱來幫助程式可讀性。

Java上比較像C的structure應該就是enum,如果主力不是Java而不常在使用可能會忘記它的用法,這裡建立名稱為Day的列畫,內容是星期幾的英文名字,像SUNDAYMONDAY

基本範例

沒有特別需求,使用預設分配常數值,如下的範例:

//-----------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

列舉Day值

前面範例只印出Day列舉中的名稱,下面的範例會印出它的名稱及值,藉此可以知道常數值是怎麼分配的:

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

當你宣告列舉時,會依照順序分配一個排序值存入私有變數ordinal再利用 ordinal()這個方法取得其值,範例會透過values()取得所有的列舉物件後再印出ordinal()值,輸出結果:

SUNDAY=0
MONDAY=1
SATURDAY=2

從輸出結果能知道它的值是由整數值的0開始累加1分配。

進階範例

其實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

參考資料

更新日誌

日期 內容
2017/07/24 增加”列舉Day值”及修正文字
2015/03/24 初版

關鍵字

  • Java Enum
  • Java 列舉
  • Java 列舉(Enum)範例