中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
丰镇市| 东兰县| 京山县| 大足县| 新泰市| 江川县| 驻马店市| 芷江| 鞍山市| 敦煌市| 任丘市| 湘潭市| 株洲县| 六盘水市| 萨嘎县| 镇沅| 宜兰市| 中超| 嵩明县| 郁南县| 广水市| 厦门市| 仁化县| 保康县| 双鸭山市| 甘孜| 林州市| 育儿| 栾川县| 台东县| 永城市| 台南县| 郎溪县| 通海县| 二手房| 黔江区| 赤峰市| 襄城县| 广元市| 楚雄市| 峨山|