J2SE 5.0 最顯著變化之一是加入泛型支援。J2SE 1.4 及之前版本中,Java 程式不具備型別安全性。例如 Collection 框架的 List、Map 元素皆為 Object 型別,需強制轉型,且無法阻止錯誤類型物件加入:
List stringList = new ArrayList();
stringList.add("abcde");
String str = (String) stringList.get(0); // 需強制轉型
stringList.add(new Integer(5)); // 編譯通過,執行時拋出 ClassCastException
String str2 = (String) stringList.get(1); // 執行時異常
泛型讓 Java 邁向型別安全的關鍵一步,可建構型別安全程式碼。
泛型即「參數化型別」。以往定義類別、介面、方法時必須指定變數型別;泛型允許以類型參數取代具體型別,使用時再由實際類別替換。
最簡單的泛型類別:
public class GenSample<T> {}
類別名後的 <T> 表明此為泛型類別,T 為類型參數,可被任何類別類型取代,但不可為基本型別(int、double 等)。