// 舊寫法:運行時才報 ClassCastException
List list = new ArrayList();
list.add("Hello");
list.add(new Integer(95)); // 編譯通過
for (Iterator i = list.iterator(); i.hasNext(); ) {
String s = (String) i.next(); // 第三次拋異常
}
// 新寫法:編譯期直接報錯
List<String> list = new ArrayList<String>();
list.add("Hello");
// list.add(new Integer(95)); // 編譯錯誤:型別不匹配
for (String s : list) { // 增強 for 循環
System.out.println(s);
}
優勢:將類型錯誤前移至編譯階段,消除強轉,代碼更清晰安全。
List<String> list = new ArrayList<String>();
list.add("A"); list.add("B");
for (String s : list) { System.out.println(s); }
// 等價於
for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
String s = it.next(); System.out.println(s);
}
適用於實作 Iterable 的所有集合與陣列,語法糖大幅簡化遍歷代碼。
Map<K,V>、Set<E>、Queue<E> 等集合介面全面泛型化。class Box<T> { T value; }。? extends T、? super T 實現協變/逆變。