List lt1 = new ArrayList();
lt1.add("感冒靈");
List lt3 = lt1; // 未檢查轉換警告
System.out.println(lt3.get(0)); // 輸出 "感冒靈",無 ClassCastException
ArrayList 變為原始類型 ArrayList,運行時無泛型信息。List lt3 = lt1; 編譯器只給警告,運行時直接賦值成功,因兩邊都是 ArrayList。lt3 取元素時,編譯器插入隱式強轉 (Integer) list.get(0),**此時才會拋 ClassCastException**。但示例中直接打印 Object(println(Object)),無強轉,**所以不報錯**。
Integer i = lt3.get(0); // 這行會拋 ClassCastException: String cannot be cast to Integer
@SuppressWarnings("unchecked") 只在確認安全處使用。List lt1 = new ArrayList<>(); 鑽石語法減少冗余。參考:堆污染詳解