泛型

關(guān)鍵詞:ParameterizedType ,WildcardType, GenericDeclaration, GenericArrayType, TypeVariable

ParameterizedType是Type的子接口,表示一個(gè)有參數(shù)的類型,例如Collection<T>,Map<K,V>等,實(shí)際上代表一個(gè)泛型的實(shí)例.

getActualTypeArguments 獲取泛型示例中的泛型變量,這個(gè)值是一個(gè)類型。因?yàn)榭赡苡卸鄠€(gè)“泛型變量”(如:Map<K,V>),所以返回的是一個(gè)Type[]。

無(wú)論<>中有幾層<>嵌套,這個(gè)方法僅僅脫去最外層的<>,之后剩下的內(nèi)容就作為這個(gè)方法的返回值,所以其返回值類型是不確定的。

煮個(gè)栗子:

List<ArrayList> a1;//返回ArrayList,Class類型
List<ArrayList<String>> a2;//返回ArrayList<String>,ParameterizedType類型
List<T> a3;//返回T,TypeVariable類型
List<? extends Number> a4; //返回? extends Number,WildcardType類型
List<ArrayList<String>[]> a5;//返回ArrayList<String>[],GenericArrayType 類型

泛型為什么不能聲明數(shù)組

List<Integer>[] li2 = new ArrayList<Integer>[];
List<Boolean> li3 = new ArrayList<Boolean>[];

泛型被擦除之后,變?yōu)長(zhǎng)ist<Object> 但是要求插入的是Integer類型,此處有歧義,因此禁止。
修改:
List<?>[] li4 = new ArrayList<?>[10];
li4[1] = new ArrayList<Stirng>();
List<?> v = li3[1];

通過(guò)反射可以正常存取數(shù)據(jù)嗎?

可以的,在參考文檔中可以看出來(lái)。

引入通配符的作用 super extends ?

<?>被稱作無(wú)限定的通配符
<? extends T>被稱作有上限的通配符
<? super T>被稱作有下限的通配符

通常是先定義一個(gè)具體的類型,然后根據(jù)對(duì)象之間的關(guān)系,賦值給<? extends T> 或者<? super T>
如:

        List<Integer> iList = new ArrayList<>();
        iList.add(11);
        iList.add(22);

        List<Float> fList = new ArrayList<>();
        fList.add((float) 11);
        fList.add((float) 22);

        List<? extends Number> elems = iList;
        System.out.print(elems.get(0));

        elems = fList;
        System.out.print(elems.get(0));

super和extends對(duì)應(yīng)于類型賦值時(shí)的對(duì)應(yīng)關(guān)系。如Fruit 是Apple的父類因此可以賦值:


image.png

總結(jié):通配符類型的限定是防止自己定義的數(shù)據(jù)結(jié)構(gòu)在后續(xù)修改時(shí),加入或者獲取不匹配的類型,能夠起到一個(gè)提示限定的作用,常用于列表賦值。

原有鏈接

鏈接:http://www.itdecent.cn/p/cfa74c980b25
鏈接:https://blog.csdn.net/briblue/article/details/76736356

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容