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