首頁 > Java > java教程 > 如何取得 Java 中泛型類型的類別文字?

如何取得 Java 中泛型類型的類別文字?

DDD
發布: 2024-12-10 05:43:16
原創
542 人瀏覽過

How Can I Get Class Literals for Generic Types in Java?

Java:取得泛型類型的類別文字

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 都可以。和列表轉換為相同的原始類型:列表。因此,每個泛型類型參數化沒有單獨的運行時表示。

這表示泛型類型存在的唯一類別文字是原始類型,例如 List.class。

反射和類型擦除:

雖然類型擦除限制了泛型類型的類文字的使用,它並沒有完全消除它們的存在。 java.lang.reflect 中的 Field.getGenericType() 方法提供在執行時間存取泛型類型資訊。但是,此方法僅限於內省,不能用於取得類文字。

結論:

由於類型擦除,無法取得類文字用於泛型類型的特定參數化的類文字。泛型類型的類別文字始終表示原始類型,它不保留類型參數資訊。

以上是如何取得 Java 中泛型類型的類別文字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板