一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

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

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

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

這篇文章主要介紹了Java泛型extends及super區別實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

概念簡單理解

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

代碼樣例解讀

父子類代碼:

 

?
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{
}
/**
 * 動物
 */
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{
}

關系圖:

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

測試代碼:

?
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);
}

關于List<? super T>

add方面

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

執行上面這行代碼是不允許的,因為listA的集合類型是Animal或者更高的父類,想一下如果代表的類型是Animal,那怎么允許add它的父類Biological呢?當然不允許了。

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

執行上面這兩句就是可以正常執行的,因為無論是Animal還是Animal的子類Dog,都是可以存到集合類型是Animal或者更高的父類的集合中的。有點拗口,不過就是這個意思。

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

添加Flower當然是不可以的,因為它不是Animal的子類。

返回值方面

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

因為listA的集合類型是Animal或者更高的父類,所以不清楚到底會是哪個類,但是我們都應該清楚所有類的父類都是Object,所以返回值是Object類型的。

關于List<? extendsT>

add方面

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

執行上面的代碼是不允許的,因為listB的集合類型是Plant或Plant的子類,想一下如果代表的類型是Plant的子類Tree,那么怎么可能可以add它的父類Plant呢?所以跟上面的那個理解差不多,就是反過來理解。看圖可以更加清晰。

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

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

?
1
listB.add(null);

特殊情況就是這個,可以add null,但是也沒意義啊。

返回值方面

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

因為listB的集合類型是Plant或者它的子類,所以不清楚到底會是哪個類,但是我們可以知道,最高的類型就是Plant了,所以返回值就是Plant類型的。

總結

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

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

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

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

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

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

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

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

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

    Java使用SAX解析xml的示例

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

    大行者10067412021-08-30
主站蜘蛛池模板: 乌克兰黄色录像 | 美女又爽又黄免费 | 好男人天堂网 | 69p69国产精品 | 国产精品久久国产精品99 gif | 国产重口老太伦 | 门房秦大爷小说 | 手机看片1024日韩 | 亚洲天堂视频在线免费观看 | 特黄特色大片免费视频大全 | 性鸥美 | 青青青青久久国产片免费精品 | 操儿子 | 亚洲欧美一区二区三区在饯 | 日本人妖网站 | 婷婷久久综合九色综合九七 | 免费99精品国产自在现线 | 欧美精品亚洲精品日韩1818 | 美女做又爽又黄又猛 | 天天碰夜夜操 | 亚洲v日韩v欧美在线观看 | 大陆国语自产精品视频在 | 免费精品99久久国产综合精品 | 婷婷综合缴情亚洲五月伊 | 四虎影视永久免费视频观看 | 黑人video粗暴日本 | 男人的天堂在线观看视频不卡 | 娇妻终于接受了3p的调教 | 我与么公激情性完整视频 | 青草青草久热精品视频在线网站 | 欧美一级欧美三级在线 | 日韩特级片 | 四虎影院2022| 19+韩国女主播激情vip视频在线 | yellow视频在线观看免费 | 被老外操 | 91韩国女主播 | 日本中文字幕在线视频站 | 爱福利视频一区二区 | 特黄特色大片免费视频播放 | 四虎在线视频免费观看 |