JDK 1.5 (代號 Tiger) 引入六大特性,協助開發者撰寫更清晰、精簡、安全的程式碼。
C++ 模板可指定集合元素型別,Java 1.5 前集合只能存 Object,取出需強制轉型。泛型提供編譯期型別檢查:
Collection<String> c = new ArrayList<String>();
c.add(new Date()); // 編譯錯誤:add(String) cannot be applied to (Date)
簡化集合遍歷,避免迭代器與強制轉型:
// 傳統寫法
void processAll(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); ) {
MyClass obj = (MyClass) i.next();
obj.process();
}
}
// 增強 for 迴路
void processAll(Collection<MyClass> c) {
for (MyClass obj : c) obj.process();
}
int → Integer)Integer → int)解決集合無法存基本型別痛點:
int a = 3;
Collection<Integer> c = new ArrayList<Integer>();
c.add(a); // 自動裝箱
Integer b = new Integer(2);
c.add(b + 2); // 拆箱運算 → 裝箱存入
全新參考型別,關鍵字 enum:
public enum Color { RED, WHITE, BLUE }
Color myColor = Color.RED;
// 實用靜態方法
for (Color c : Color.values()) System.out.println(c);
Color c = Color.valueOf("RED");
方法可接受同類型可變數量參數(必須為最後一個參數):
public void write(Object... objs) {
for (Object obj : objs) System.out.println(obj);
}
// 呼叫
write(obj1);
write(obj1, obj2);
write(obj1, obj2, obj3);
反射 API 亦受惠:c.getMethod("test").invoke(c.newInstance()) 取代繁瑣的陣列傳遞。
導入類別的靜態成員(方法、變數),使用時無需類別名稱:
import static java.lang.Math.*;
double r = sin(PI * 2); // 無需 Math.sin(Math.PI)
注意:過度使用降低程式碼可讀性,建議僅用於頻繁使用的常數與工具方法。
JDK 1.5 正式版即將釋出,開發者可先下載 Beta 版體驗新特性帶來的開發效率提升。