在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 這樣的泛型定義到底如何調用才是對的呢?

這樣的泛型定義到底如何調用才是對的呢?

public class Abc<T>{

     public Abc(Class<T> type) {
        
    }
}

我調用的時候

Abc<HashSet<String>> Abc = new Abc<HashSet<String>>(HashSet<String>.class);

通不過,報錯

Abc<HashSet<String>> Abc = new Abc<HashSet<String>>(HashSet.class);

還是報錯

Abc<HashSet> Abc = new Abc<HashSet>(HashSet.class);

這樣終于可以了,但是沒有指定 HashSet 容器內部的類型,IDE 報警,而且我也覺得這好像不是正統(tǒng)的 java 寫法,正統(tǒng)的 java 寫法都應該指定容器里的類型的。

我查了不少資料,因為類型擦除的原因,看起來最后一種才是對的,但是為啥最后一種那么別扭呢。沒給容器指定元素類型這個報警問題是只能這樣,還是有更好的辦法?

回答
編輯回答
落殤

一般來說不會用傳入T.class的形式來讀取泛型信息。

在泛型類內部,可以在運行時通過反射獲取T的具體類型信息,手機答題不方便貼鏈接了,你可以搜索‘’ParameterizedType”關鍵字來獲取這方面的信息。

2018年3月23日 23:08
編輯回答
淺時光

因為java的泛型是1.5才加的,而且java有非對象數(shù)據(jù)類型,因此泛型實現(xiàn)的比較別扭。
你這種情況只能用@SuppressWarnings壓制警告了

2017年9月16日 12:54
編輯回答
青檸

沒有 HashSet<String>.class 只有HashSet.class

2018年3月16日 06:54