当前位置:首页 > 每日看点 > 正文内容

被ja中

卡卷网10个月前 (01-10)每日看点158

Ja泛型边界:为啥要用extends和super?

开胃菜:为啥要有边界?

先来看个场景:

//假设我们在写一个动物园 List<Dog>dogs=newArrayList<>(); List<Animal>animals=dogs;//❌编译报错! //但我们明明知道狗是动物啊为啥不能这样写

这就是今天要解决的问题!

上界<?extendsT>:只能取不能存

1.extends的核心特点:

List<?extendsAnimal>animals=newArrayList<Dog>();//可以 List<?extendsAnimal>animals=newArrayList<Cat>();//也可以r/> //但是! animals.add(newDog());//❌编译报错 animals.add(newCat());//❌编译报错 animals.add(newAnimal());//❌还是报错 Animalanimal=animals.get(0);//读取没问题

2.为什么不能add?

想象你有一个装动物的盒子:

List<?extendsAnimal>ox=newArrayList<Dog>(); //编译器:"这个盒子可能是装狗的,也可能是装猫的" //"我不能让你往里面放任何东物,因为不知道具体是啥"

3.什么时候用extends?

//当你只需要读取数据时 pulicvoidprintAnimals(List<?extendsAnimal>animals){ for(Animala:animals){//安全,因为知道都是Animal System.out.println(a.getName()); } }

下界<?superT>:只能存不能取(完全取)

1.super的核心特点:

List<?superDog>dogs=newArrayList<Animal>();//可以 List<?superDog>dogs=newArrayList<Oject>();//也可以 dogs.add(newDog());//✅可以添加Dog dogs.add(newHusky());//✅可以添加Dog的子类 Dogdog=dogs.get(0);//❌编译报错 Ojectoj=dogs.get(0);//只能以Oject接收

2.为什么不能完全get?

List<?superDog>ox=newArrayList<Animal>(); //编译器:"这个盒子可能是装Animal的,也可能是装Oject的" //"我只能保证取出的东西是个Oject"

3.什么时候用super?

//当你需要写入数据时 pulicvoidaddDogs(List<?superDog>dogs){ dogs.add(newDog());//安全,因为容器至少能装Dog dogs.add(newHusky());//Husky是Dog的子类,也没问题 }

经验法则:PE原则

ProducerExtends,ConsumerSuper

1.生产者用extends

//当你需要从中读取数据时 pulicvoidreadAnimals(List<?extendsAnimal>animals){ //这里的是数据的生产者 animals.forEach(Animal::makeSound); }

2.消费者用super

//当你需要往中写入数据时 pulicvoidaddDogs(List<?superDog>dogs){ //这里的是数据的消费者 dogs.add(newDog()); }

-如果只读取,用extends-如果只写入,用super-如果既要读又要写,别用通配符!

//不要这样 pulicvoidconfusingMethod(List<?>list){...} //要这样 pulic<T>voidclearMethod(List<T>list){...}


<>最后做个总结

泛型边界就像动物园的笼子,extends是"此笼最大能装xx",super是"此笼最小能装xx"

extends不能存能取(Animal)用于生产者场景super能存(Dog及子类)不能完全取(只能取Oject)用于消费者场景

如果觉得有帮助请点个赞!

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/8453.html

分享给朋友:

相关文章

为什么我们一直在给B站充大会员但B站却一直处于亏损状态?

我讲一下离谱的真相吧,欢迎喷我。很多人都觉得B站在赶走人才,赶走优秀的长视频创作者,也觉得知乎在这么做,是没错的。确实在这么做。而原因很简单。只有影响力很大的KOL才有商业价值。(KOL是指“关键意见领袖”)而你说你是人才?对不起,人才不赚...

网易云音乐上看到过最触动的热评是什么?

网易云音乐上看到过最触动的热评是什么?

1.“昨天晚上洗澡的时候,我忘记拿毛巾了,喊了声妈妈帮我拿下毛巾,正当我伸出左手准备接毛巾的时候,我愣了一下,又换了右手。”希望你永远不会听懂这句话,永远都不要懂。——网易云热评《关键词》2.小时候跟着父亲去城里卖西瓜,害怕同学会看到我,就...

抖音上有一些账号搬运别人的视频,几乎一模一样,也没判搬运,他们是怎么做到的??

对于任何短视频平台来说,如何用最低的成本快速实现伪原创搬运都是需要解决的问题。所有的短视频平台,包括抖音、快手、tiktok、视频号、小红书、B站,甚至是FB、推特、INS、YouTube,它们的查重技术都是类似的,只要你在网络环境设置得当...

想入个键盘,想买机械的但是太贵,求知友推荐一款手感比较好的薄膜键盘?

想入个键盘,想买机械的但是太贵,求知友推荐一款手感比较好的薄膜键盘?

相信很多接触过286的90后朋友都和我有一样的体会,以前的机械键盘真的是让人头皮发麻,不仅敲击要非常用力,而且很吵。所以后面随着大家的生活消费水平的上升,家家户户都有电脑了,自然也不想再用打字来宣扬自己有电脑的优越感,基本上大家都换成了又轻...

是不是从Java培训班出来的人都被淘汰了?

真实个人经历。我就是从培训班出来的,但没有学完就跑出来了。当我明白什么人不管什么基础都能进培训班进行培训,学到什么程度都能保证他们包就业,我就知道不正常。我自己是大三下的时候去的,考研考到一半感觉无望,想抓紧时间学习技术,利用应届生身份准备...

为什么张雪峰什么专业都懂?

他不懂专业,他懂的是就业。我记得有个老哥,家里条件不好,母亲吸血。想脱离家庭张雪峰眼睛一亮就说这是个学土木的好苗子。作为土木人我可知道他说的太对了,这种人学土木毕业进中建中铁,直接给你拉非洲看大鳄鱼呲牙。工资不低还能脱离家庭,可不是个学土木...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。