1.3 枚舉類型的應用
下面各小 節介紹了枚舉類型的各種應用.
1.3.1循環(Iteration)
當我們寫程序時 ,常常遇到對數組或列表裡的每一個對象進行處理的情況.在J2SE 5.0以前,如果要在一 個數組或列表裡進行輪循時,我們的做法比較繁瑣,需要借助Java.util.Iterator 類, 如下所示:
清單5:
List prioritIEs = Priority.values().;
for (Iterator iter = prioritIEs.iterator(); iter.hasNext();) {
Priority p = (Priority) iter.next();
process(p);
}
現在我們可以通過J2SE 5.0 的for/in loop和枚舉類型一起使用. 這能使以前花很多時間 寫的程序簡單化,如上面清單5的程序可簡化為:
清單6:
for (Priority g: Priority.values()){
process(g);
}
我們 把上面的偽代碼寫成程序在Eclipse3.1上運行,如下圖所示,在右下控制平台視圖裡顯示 了運行結果.如果看不見控制平台,點擊Window->Other VIEws->Console, 控制平 台就會出現在右下角.
圖6 枚舉類型在循環中的應用
我們 在使用for/in loop 時要求它的表達式要求必須是數組或者是實現了Java.lang.Iterable 的集合,而枚舉類型的values()函數返回的就是一個數組.另外循環變量的聲明必須是在 loop裡, 包括變量類型和變量名.
我們不能在循環裡使用一個在循環之外聲明的變量.這和J2SE 5.0以前for loop 裡用 的循環變量的聲明不同.
1.3.2 轉換(Switch)
我們常用的一種判斷語句就是Switch-case 語句. 在Switch 語句中使用枚舉類型,不 僅能簡化程序,而且增強了程序的可讀性.
清單8.
File1: Task.Java
public class Task {
Priority myPriority;
public Task (Priority p) {
myPriority=p;
}
public Priority getPriority(){
return myPriority;
}}
File2: TestSwitch.Java
public class TestSwitch (
Task task = new Task(Priority.Medium);
switch (task.getPriority( )) {
case High:
//do case High
break;
case Midum: // fall through to Low
case Low:
//do case Low
break;
default: throw new AssertionError("Unexpected enumerated value!");
}
}