亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

java怎么獲取泛型T的class

小億
614
2024-01-13 14:00:46
欄目: 編程語言

在Java中,由于類型擦除的限制,無法直接獲取泛型類型的Class對象。但是,可以通過以下兩種方式來獲取泛型類型的Class對象:

  1. 通過傳遞一個Class參數來獲取泛型類型的Class對象:
public class MyClass<T> {
    private Class<T> type;
    
    public MyClass(Class<T> type) {
        this.type = type;
    }
    
    public Class<T> getType() {
        return type;
    }
}

// 使用示例
MyClass<String> myClass = new MyClass<>(String.class);
Class<String> stringClass = myClass.getType();

在上面的示例中,通過在構造方法中傳遞一個Class參數來獲取泛型類型的Class對象,并保存在一個成員變量中,然后通過getType方法來獲取該Class對象。

  1. 通過反射來獲取泛型類型的Class對象:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class MyClass<T> {
    public Class<T> getType() {
        Type type = getClass().getGenericSuperclass();
        ParameterizedType paramType = (ParameterizedType) type;
        Type[] actualTypeArguments = paramType.getActualTypeArguments();
        return (Class<T>) actualTypeArguments[0];
    }
}

// 使用示例
MyClass<String> myClass = new MyClass<String>();
Class<String> stringClass = myClass.getType();

在上面的示例中,通過使用反射,可以獲取到泛型類型的Class對象。首先通過getClass方法獲取當前對象的Class對象,然后通過getGenericSuperclass方法獲取該Class對象的父類的Type對象,接著判斷該Type對象是否為ParameterizedType類型,如果是的話,通過getActualTypeArguments方法獲取到實際的類型參數的Type對象數組,最后通過強制轉換為Class對象來獲取到泛型類型的Class對象。

需要注意的是,在使用第二種方式獲取泛型類型的Class對象時,必須在子類中實現一個無參的構造方法,否則會拋出ClassCastException異常。

0
江城| 石嘴山市| 峨眉山市| 焉耆| 建始县| 高雄市| 毕节市| 南丹县| 闽侯县| 东台市| 梁河县| 济阳县| 新晃| 安庆市| 花莲县| 南汇区| 玛纳斯县| 宜章县| 巴中市| 育儿| 凤阳县| 苍溪县| 宜良县| 广宗县| 泰州市| 林口县| 建德市| 托克托县| 临猗县| 化德县| 大同县| 贺兰县| 新晃| 洛川县| 昌平区| 海晏县| 包头市| 甘德县| 秭归县| 沁源县| 昂仁县|