泛型
泛型是通過 Type erasure 在 Java 中實現的,這意味著在執行時期間,泛型類的例項化中指定的 Type 資訊不可用。例如,語句 List<String> names = new ArrayList<>();
生成一個列表物件,在執行時無法從中恢復元素型別 String
。但是,如果列表儲存在 List<String>
型別的欄位中,或者傳遞給此型別的方法/建構函式引數,或者從該返回型別的方法返回,則可以在執行時通過 Java 恢復完整型別資訊反射 API。
這也意味著當轉換為泛型型別(例如:(List<String>) list
)時,強制轉換是未經檢查的強制轉換。因為引數 <String>
被擦除,所以 JVM 無法檢查從 List<?>
到 List<String>
的轉換是否正確; JVM 只能在執行時看到 List
到 List
的強制轉換。