直接使用集合具體類別 (如 Vector 的 elementAt()) 導致客戶代碼綁定具體實作。若後續換用 List (Java 1.2),需大幅修改代碼。Enumeration 提供統一遍歷抽象,屏蔽底層結構差異。
elements() 獲取 Enumeration。nextElement() 取得下一個元素 (返回 Object)。hasMoreElements() 判斷是否結束。命名歷史包袱:C++/OOP 慣稱 Iterator,Java 1.2 修正為 Iterator 並簡化方法名。
// 舊版:綁定 Vector for (int i=0; i優勢:無需關心元素數量,
hasMoreElements()/nextElement()自動處理邊界。通用列印工具與型別擦除
static void printAll(Enumeration e) { while (e.hasMoreElements()) System.out.println(e.nextElement().toString()); // 僅依賴 Object.toString() }更簡潔寫法:
System.out.println("" + e.nextElement())利用編譯器自動轉字串 (調用toString()),或強制造型(String)e.nextElement()。型別安全痛點
實際開發常需調用特定方法,必須假定 Enumeration 元素型別並造型:
((MyType)e.nextElement()).myMethod(); // 造型錯誤 → 運行時 ClassCastException這是 Java 1.2 泛型 (
Iterator) 解決的核心問題:編譯期型別檢查,消除運行時造型風險。