首頁 > Java > java教程 > 如何使用反射來取得 Java 中的泛型參數類型?

如何使用反射來取得 Java 中的泛型參數類型?

Mary-Kate Olsen
發布: 2024-12-31 20:09:10
原創
800 人瀏覽過

How Can I Get Generic Parameter Types in Java Using Reflection?

使用反射在Java 中獲取泛型參數類型

在Java 中,泛型類型是一個強大的功能,它允許更靈活和可重複使用的程式碼。然而,使用通用參數有時可能會很棘手。一個常見的挑戰是在運行時確定泛型參數的實際類型。

可能嗎?

是的,可以取得泛型參數的型別使用反射。反射提供了一種在執行時間存取和操作有關 Java 類別的結構、欄位和方法的詳細資訊的方法。

範例:

考慮以下程式碼片段:

public class Voodoo {
    public static void chill(List<?> aListWithTypeSpiderMan) {
        // Here I'd like to get the Class-Object 'SpiderMan'
        Class typeOfTheList = ???;
    }

    public static void main(String... args) {
        chill(new ArrayList<SpiderMan>());
    }
}
登入後複製

在 chill 方法中,我們有一個未知類型的清單。我們想要確定實際的類型參數,在本例中應該是 SpiderMan。

解決方案:

解決方案涉及使用 ParameterizedType 接口,它是一種類型描述參數化類型的類型,例如使用泛型的類型。以下是我們如何實現它:

Class typeOfTheList = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
登入後複製

這段程式碼取得目前類別的超類別(在本例中為 Voodoo),它應該是一個參數化類型,然後提取實際的類型參數。第一個類型參數對應於我們感興趣的類型參數,即 SpiderMan。

注意:

Java 16 之前不完全支援此技術。早期對泛型類型使用反射被認為是 hacky,但從 Java 16 開始,getActualTypeArguments() 已添加到 Type 介面中,提供了一種更乾淨、更簡化的方式存取通用類型資訊。

以上是如何使用反射來取得 Java 中的泛型參數類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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