Java 中的泛型是一個強大的功能,可以在編譯時實現類型安全。然而,它們的實作在獲取泛型類型的類別文字時帶來了挑戰。
問題:
通常,使用以下語法取得類文字:
Class<Foo> cls = Foo.class;
但是當涉及到List 這樣的泛型類型時,複雜化出現:
Class<List> cls = List.class // warning: List should be parameterized
加上通配符>來概括型別會導致型別不符合錯誤:
Class<List<?>> cls = List.class // type mismatch
嘗試指定實際型別參數,例如,List
解:
不幸的是,在 Java 中不可能靜態取得具有特定型別參數的泛型類型的類文字。這是由於稱為類型擦除的過程。
在編譯期間,通用型別資訊被刪除,只留下原始型別。例如,List
這表示泛型類型存在的唯一類別文字是原始類型,例如 List.class。
反射和類型擦除:
雖然類型擦除限制了泛型類型的類文字的使用,它並沒有完全消除它們的存在。 java.lang.reflect 中的 Field.getGenericType() 方法提供在執行時間存取泛型類型資訊。但是,此方法僅限於內省,不能用於取得類文字。
結論:
由於類型擦除,無法取得類文字用於泛型類型的特定參數化的類文字。泛型類型的類別文字始終表示原始類型,它不保留類型參數資訊。
以上是如何取得 Java 中泛型類型的類別文字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!