激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 一篇文章帶你了解Java泛型的super和extends

一篇文章帶你了解Java泛型的super和extends

2021-11-05 10:33BJT Java教程

這篇文章主要介紹了Java泛型extends及super區(qū)別實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

概念簡(jiǎn)單理解

  • List<? extends T>表示該集合中存在的都是類(lèi)型T的子類(lèi),包括T自己
  • List<? super T>表示該集合中存的都是類(lèi)型T的父類(lèi),包括T自己

代碼樣例解讀

父子類(lèi)代碼:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
 * 生物
 */
static class Biological{
}
/**
 * 動(dòng)物
 */
static class Animal extends Biological{
}
/**
 * 植物
 */
static class Plant extends Biological{
}
 
static class Dog extends Animal{
}
static class Cat extends Animal{
}
static class Flower extends Plant{
}
static class Tree extends Plant{
}

關(guān)系圖:

一篇文章帶你了解Java泛型的super和extends

測(cè)試代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
    List<? super Animal> listA = new ArrayList<>();
    List<? extends Plant> listB = new ArrayList<>();
    //listA.add(new Biological()); 
    listA.add(new Animal());
    listA.add(new Dog());
    //listA.add(new Flower());
    Object object = listA.get(0);
    //listB.add(new Plant());
    //listB.add(new Flower());
    listB.add(null);
    Plant plant = listB.get(0);
}

關(guān)于List<? super T>

add方面

?
1
List<? super Animal> listA = new ArrayList<>();
?
1
listA.add(new Biological()); 

執(zhí)行上面這行代碼是不允許的,因?yàn)閘istA的集合類(lèi)型是Animal或者更高的父類(lèi),想一下如果代表的類(lèi)型是Animal,那怎么允許add它的父類(lèi)Biological呢?當(dāng)然不允許了。

?
1
2
listA.add(new Animal());
listA.add(new Dog());

執(zhí)行上面這兩句就是可以正常執(zhí)行的,因?yàn)闊o(wú)論是Animal還是Animal的子類(lèi)Dog,都是可以存到集合類(lèi)型是Animal或者更高的父類(lèi)的集合中的。有點(diǎn)拗口,不過(guò)就是這個(gè)意思。

?
1
listA.add(new Flower());

添加Flower當(dāng)然是不可以的,因?yàn)樗皇茿nimal的子類(lèi)。

返回值方面

?
1
Object object = listA.get(0);

因?yàn)閘istA的集合類(lèi)型是Animal或者更高的父類(lèi),所以不清楚到底會(huì)是哪個(gè)類(lèi),但是我們都應(yīng)該清楚所有類(lèi)的父類(lèi)都是Object,所以返回值是Object類(lèi)型的。

關(guān)于List<? extendsT>

add方面

?
1
List<? extends Plant> listB = new ArrayList<>();
?
1
listB.add(new Plant());

執(zhí)行上面的代碼是不允許的,因?yàn)閘istB的集合類(lèi)型是Plant或Plant的子類(lèi),想一下如果代表的類(lèi)型是Plant的子類(lèi)Tree,那么怎么可能可以add它的父類(lèi)Plant呢?所以跟上面的那個(gè)理解差不多,就是反過(guò)來(lái)理解。看圖可以更加清晰。

?
1
listB.add(new Flower());

這個(gè)同理,如何代表的類(lèi)型是Flower的子類(lèi)Rose(玫瑰花),這樣當(dāng)然不可以add它的父類(lèi)Flower了。

?
1
listB.add(null);

特殊情況就是這個(gè),可以add null,但是也沒(méi)意義啊。

返回值方面

?
1
Plant plant = listB.get(0);

因?yàn)閘istB的集合類(lèi)型是Plant或者它的子類(lèi),所以不清楚到底會(huì)是哪個(gè)類(lèi),但是我們可以知道,最高的類(lèi)型就是Plant了,所以返回值就是Plant類(lèi)型的。

總結(jié)

  • List<? super T>表示該集合中存的都是類(lèi)型T的父類(lèi),包括T自己
    • add:不能add任何對(duì)象(特例:可以添加null)
    • get:get返回的對(duì)象類(lèi)型為T(mén)
  • List<? extends T>表示該集合中存在的都是類(lèi)型T的子類(lèi),包括T自己
    • add:只能添加T及T的子類(lèi)
    • get:get返回的對(duì)象類(lèi)型為Object

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注服務(wù)器之家的更多內(nèi)容!

原文鏈接:https://blog.csdn.net/weixin_43883917/article/details/119394236

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開(kāi)發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
主站蜘蛛池模板: 激情小说图 | 男女牲高爱潮免费视频男女 | 欧美日韩亚洲一区二区三区 | 黄网站色成年大片免费高 | 蜜桃视频在线免费播放 | 亚洲va在线 | 亚洲精品成人18久久久久 | 无遮挡一级毛片视频 | h色网站免费观看 | 欧美精品123区 | 一级黄色电影网站 | 国产69精品福利视频 | 日日综合 | 亚洲欧美成aⅴ人在线观看 av免费在线播放 | 久久精品视频在线免费观看 | 在线观看免费污视频 | 久久国产精 | 中文字幕精品一区久久久久 | 蜜桃一本色道久久综合亚洲精品冫 | 人人做人人看 | 成人资源在线观看 | 成人午夜视频在线观看免费 | 精品人伦一区二区三区蜜桃网站 | 18欧美性xxxx极品hd | 中国老女人一级毛片视频 | 久草在线最新 | 久久久久.com | 久久国产精品久久精品国产演员表 | 中文字幕亚洲一区二区三区 | 日日狠狠久久偷偷四色综合免费 | 国产一区二区午夜 | 久久6国产 | 国产精品一区在线免费观看 | 99re66热这里只有精品8 | 欧洲成人一区 | 久色免费| 日美av在线 | a黄网站 | 欧美 日韩 中文 | 国产porn在线 | 有兽焉免费动画 |