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

被ja中

卡卷网1年前 (2025-01-10)每日看点203

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

分享给朋友:

相关文章

五个私藏宝贝网站!上班族摸鱼必备,打造快乐小天地

五个私藏宝贝网站!上班族摸鱼必备,打造快乐小天地

有朋友提到,虽然一整天都在“摸鱼”,但却感觉身心俱疲,甚至比一直忙碌工作还要累。其实这背后是有科学依据的。当人专注于工作时,会进入一种“心流”状态,这种状态让人感到兴奋、满足且充实。相反,如果在工作时分心“摸鱼”,会导致注意力分散,增加认知...

普通人一部手机用多久?

普通人一部手机用多久?

各位知友,你们的现在的手机用了多久了呢?回看国外分析机构TechInsights的报告,目前大家的用机周期是越来越长了,在国内,也达到了「40个月」,就是很多人至少三年半才会换一次手机。仔细想想,不对呀,现在新机不是一直出吗?为什么大家都不...

内存和硬盘的单位都是G,两者的功能是什么?谁能用简单通俗的方式来解读一下?

内存和硬盘的单位都是G,两者的功能是什么?谁能用简单通俗的方式来解读一下?

要弄清楚这个问题,首先要弄清楚什么是内存,什么是硬盘,在计算机的组成结构中有一个很重要的部分是存储器。它是用来存储程序和数据的部件。对于计算机来说,有了存储器,才有记忆功能,,才能保证正常工作。存储器的种类很多。按其用途可分为主存储器与辅助...

你捡过最大的漏是什么?

你捡过最大的漏是什么?

买了套二手房,软磨硬泡便宜了1个w 结果就是一屋子狼藉 原业主说反正你们要重新装修 就不收拾了 等完了你们一起收拾掉吧 落了很多柜子 电器是啥的 今天打开卧室柜子一看…现在是去存钱的路上有朋友知道这样存钱银行会给发大米跟油吗...

你每天用来涨知识的手机应用程序有哪些?

你每天用来涨知识的手机应用程序有哪些?

经过深度使用和测评,从100个APP中选出的这35个超实用的app,每一个都是最硬核最有料的涨知识神器!每天打开看看,能让你提神醒脑,眼界大开,成为朋友聚会上的话题王者!双击屏幕取走哦~先放上全部APP目录,有新闻资讯类、英语学习类、读书类...

提升自己最快的方式是什么?

提升自己最快的方式是什么?

1.稻盛和夫说过:“改变自己最快的方法就是做自己害怕的事,不敢做的事,认为自己做不到,觉得不可能的事。如果在自己的舒适区待久了,就会丧失斗志,如果想快速的改变,可以坚持去做一些对自己有益的事。2.早睡早起,坚持运动保持旺盛的精力,人生拼到最...

发表评论

访客

看不清,换一张

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