/**
* 簡單枚舉
* @author littlehow
*
*/
public enum Week {
//周一到周日,不重寫其toString的情況,預設為字面量
Monday(1), Tuesday(2), Wednesday(3), Thursday(4), Friday(5), Saturday(6), Sunday(0);
private int day;
Week(int day) {
this.day = day;
}
/**
* 根據數字天數傳回對應枚舉
* @param day 0-6之間的天數
* @return
*/
public static Week valueOf(int day) {
if (day < 0 || day > 6 ) throw new IllegalArgumentException("no enum day is " + day);
Week w = null;
//數字都在可控範圍,不需要default
switch (day) {
case 0 :
w = Sunday; break;
case 1 :
w = Monday; break;
case 2 :
w = Tuesday; break;
case 3 :
w = Wednesday; break;
case 4 :
w = Thursday; break;
case 5 :
w = Friday; break;
case 6 :
w = Saturday;
}
return w;
}
/**
* 擷取對應的數值
* @return
*/
public int getDay() {
return this.day;
}
/**
* 對枚舉的一些基本操作
* @param args
*/
public static void main(String[] args) {
System.out.println(Monday);//輸出Monday
/** 根據字面量擷取枚舉執行個體 */
Week w = Week.valueOf("Thursday");
System.out.println(w.getDay());//4
/** 根據數字天數擷取 */
w = Week.valueOf(2);
System.out.println(w);//Tuesday
try {
/** 超出範圍則抛出異常 */
w = Week.valueOf(8);
} catch (Exception e) {
System.out.println(e.getMessage());//no enum day is 8
}
try {
/** 設定一個沒有字面量的枚舉 */
w = Week.valueOf("ME");
} catch (Exception e) {
System.out.println(e.getMessage());//No enum constant Week.ME
}
//枚舉可作為switch控制語句
java.util.Random r = new java.util.Random();
for (int i = 0; i < 3; i ++) {
w = Week.valueOf(r.nextInt(7));//随機三次0-6,看看不同的輸出咯
switch (w) {
case Monday :
System.out.println("今天是周一,又要開始上班了,嗚嗚..."); break;
case Tuesday :
System.out.println("今天是周二,昨天上班好累啊."); break;
case Wednesday :
System.out.println("一晃就周三啦,還有兩天放假了,哈哈..."); break;
case Thursday :
System.out.println("周四了,今天都幹了啥呢?"); break;
case Friday :
System.out.println("請大吼一句:老夫明天不上班!!"); break;
case Saturday :
case Sunday :
System.out.println("好好放松啦,得之不易的周末哎!"); break;
default :
System.out.println("昏天暗地,不知時日啊!");
}
}
}
}