泛型

泛型是通過 Type erasure 在 Java 中實現的,這意味著在執行時期間,泛型類的例項化中指定的 Type 資訊不可用。例如,語句 List<String> names = new ArrayList<>(); 生成一個列表物件,在執行時無法從中恢復元素型別 String。但是,如果列表儲存在 List<String> 型別的欄位中,或者傳遞給此型別的方法/建構函式引數,或者從該返回型別的方法返回,則可以在執行時通過 Java 恢復完整型別資訊反射 API。

這也意味著當轉換為泛型型別(例如:(List<String>) list)時,強制轉換是未經檢查的強制轉換。因為引數 <String> 被擦除,所以 JVM 無法檢查從 List<?>List<String> 的轉換是否正確; JVM 只能在執行時看到 ListList 的強制轉換。