Java 列舉(Enum)範例
Enum: Day.SUNDAY。。Day.MONDAY
Enum中文會翻成列舉,它的用途是定義常數與名稱的關系,在程式直接使用名稱來幫助程式可讀性。
Java上比較像C的structure應該就是enum,如果主力不是Java而不常在使用可能會忘記它的用法,這裡建立名稱為Day的列畫,內容是星期幾的英文名字,像SUNDAY、MONDAY。
基本範例
沒有特別需求,使用預設分配常數值,如下的範例:
public enum Day {
SUNDAY,
MONDAY,
SATURDAY
}
列舉Day名稱
透過values取得所有項目,再利用方法name 或 toString 將Day中的名稱印出來:
for(Day day: Day.values())
System.out.println(day.name());
}
或
for(Day day: Day.values()) {
System.out.println(day.toString());
}
輸出結果:
SUNDAY
MONDAY
SATURDAY
列舉Day值
前面範例只印出Day列舉中的名稱,下面的範例會印出它的名稱及值,藉此可以知道常數值是怎麼分配的:
for(Day day: Day.values()) {
System.out.println(day.toString() + "=" + day.ordinal());
}
當你宣告列舉時,會依照順序分配一個排序值存入私有變數ordinal再利用 ordinal()這個方法取得其值,範例會透過values()取得所有的列舉物件後再印出ordinal()值,輸出結果:
SUNDAY=0
MONDAY=1
SATURDAY=2
從輸出結果能知道它的值是由整數值的0開始累加1分配。
進階範例
其實Enum是利用Class、Interface加上Compiler自動生成一些程式碼所組成的,所以你可以在使用你建立的enum之前定義它的變數、方法…等。 下面範例可以指定你定義的enum它實際代表的值為何:
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;
}
}
列舉Day名稱代表的值
上述程式有實作代表數值部分,如此一來能使用Day.SUNDAY.getValue取得你定義的值(SUNDAY=11),列舉整個名稱代表的值:
for(Day day: Day.values()) {
System.out.println("name:" + day.name() + "\nvalue:" + day.getValue());
}
輸出結果:
name:SUNDAY
value:4
name:MONDAY
value:5
name:SATURDAY
value:11
覆寫列舉中的方法
前面介紹的為基本的範例,另外你也可以Override覆寫方法像是toString:
@Override
public String toString() {
switch(this) {
case SUNDAY:
return "Sunday: " + value;
case MONDAY:
return "Monday: " + value;
case SATURDAY:
return "Saturday: " + value;
default:
return null;
}
}
列舉 Day並使用toString
使用覆寫toString的新方法印出名稱(第一個字母大寫)、代表的值。
for(Day day: Day.values()) {
System.out.println(day.toString());
}
輸出結果:
Sunday: 4
Monday: 5
Saturday: 11
參考資料
更新日誌
| 日期 | 內容 |
|---|---|
| 2017/07/24 | 增加"列舉Day值"及修正文字 |
| 2015/03/24 | 初版 |
關鍵字
- Java Enum
- Java 列舉
- Java 列舉(Enum)範例