2022-10-21
泛型 list 表示 類型
第四關(guān) 泛型之飛天遁地
小伙伴們,泛型我們已經(jīng)學(xué)到第四關(guān)了,是不是感覺泛型很強(qiáng)大啊!但是不要得意,泛型也有“軟肋”,
泛型在使用時(shí),有時(shí)并不能隨意指定任意類型,也就是說,泛型在使用時(shí)具有類型限制,具體體現(xiàn)為泛型之飛天 ;
就是泛型的上限,泛型之遁地 ; 就是泛型的下限。
來吧,我們一起來看一下泛型的上限和下限。
在泛型上限和下限的分析過程中,我們會(huì)看到 ?符號(hào)經(jīng)常出現(xiàn),在這里 ?表示通配符,表示任意類型,小伙伴們需要注意一下喔。
1.泛型通配符
切記: ?表示通配符,表示任意的類型。
如下代碼:
ArrayList list1 ;
ArrayListlist2 = new ArrayList();
ArrayListlist3 = new ArrayList();
list1 = list2;// ? 表示 String類型
list1 = list3;// ? 表示 Integer類型
在這里,小伙伴一定要注意: ?這個(gè)符號(hào)神通廣大,可以用來表示任意的泛型類型。
上述代碼中創(chuàng)建了一個(gè)帶?泛型list1。
如果把創(chuàng)建帶String泛型的list2賦值為list1, 那么此時(shí)?表示String 類型
如果把創(chuàng)建帶Integer泛型的list3賦值為list1, 那么此時(shí)?表示Integer類型
講到這里,小伙伴基本上明白了?符號(hào)的含義了,通常 ?會(huì)出現(xiàn)在泛型的上限和下限定義中使用中,我們接下來看看?這個(gè)通配符,
在泛型的上限和下限過程怎么使用的,let`s go。
2.泛型的上限
定義的基本語(yǔ)法:定義基本語(yǔ)法:類名或者接口名,那么此時(shí) ?表示T類型,或者T的子類型
我們通過一段List接口的源碼來分析一下泛型的上限,源碼如下:
public interface Listextends Collection{
/**
* 方法作用:將一個(gè)集合 添加到 List中,
* 這時(shí)集合的類型 ? extends E ,這里? 表示是E的子類類型,?的上限不能超過E
*/
boolean addAll(Collection c);
----
}
代碼演示:
Listlist = new ArrayList();//創(chuàng)建一個(gè)集合: 泛型為Number
Listson1 = new ArrayList() ;
Listson2 = new ArrayList() ;
Liststr_list = new ArrayList();
list.addAll(son1);// ? 表示 Number,上限是Number
list.addAll(son2);// ? 表示Long,Long是Number的子類
// list.addAll(str_list);//編譯報(bào)錯(cuò): 原因 String 和 Number 沒有繼承關(guān)系
泛型的上限,就是在使用泛型時(shí),不能超過extends后面定義的類型,所以大家在使用時(shí),一定要注意類型的子、父級(jí)關(guān)系。
3.泛型的下限
定義基本語(yǔ)法: 類名或者接口名,那么此時(shí) ?表示T類型,或者T的父類型
剛剛看了泛型的上限,那么下限對(duì)于小伙伴來說就會(huì)簡(jiǎn)單很多了。
我們還是通過List集合來分析泛型的下限。
比如:
List list = new ArrayList();//創(chuàng)建一個(gè)集合
list = new ArrayList();// ? 表示Integer
list = new ArrayList();// ? 表示Number: Number是Integer的父類
list = new ArrayList();// ? 表示Object: Object是Integer的父類
// list = new ArrayList();//編譯報(bào)錯(cuò): ? 表示String: String和Integer沒有關(guān)系
泛型的下限,就是在使用泛型時(shí),必須高于super后面的定義的類型,所以大家在使用時(shí),一定要注意類型的父、子級(jí)關(guān)系
闖關(guān)練習(xí)
請(qǐng)描述 ? 通配符 在泛型中的具體使用(多選)。
A:在定義泛型的上限時(shí): 可以使用?通配符 表示 泛型的子類
B:在定義泛型的下限時(shí): 可以使用?通配符 表示 泛型的父類
C:在定義泛型時(shí),可以不用 ?通配符
D: 以上說法都不對(duì)
答案:
ABC
開班時(shí)間:2021-04-12(深圳)
開班盛況開班時(shí)間:2021-05-17(北京)
開班盛況開班時(shí)間:2021-03-22(杭州)
開班盛況開班時(shí)間:2021-04-26(北京)
開班盛況開班時(shí)間:2021-05-10(北京)
開班盛況開班時(shí)間:2021-02-22(北京)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2020-09-21(上海)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2019-07-22(北京)
開班盛況
Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right
京ICP備12003911號(hào)-5
京公網(wǎng)安備 11010802035720號(hào)