当前位置:首页 > 每日看点

被ja中

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

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

分享给朋友:

相关文章

免费流量才是王道 独立网站如何正确“花钱” ?

免费流量才是王道 独立网站如何正确“花钱” ?

获客难、广告成本高、效益差是平台卖家普遍遇到的发展瓶颈,由此也让不少卖家转向独立站之路。由平台转向独立站、曾做到谷歌全球搜索排名前三的成人用品独立站卖家林健认为,独立站由于不限制广告方式和渠道的优势,成为跨境电商卖家的一个很好选择。“如果谷…

每天5点就下班了,闲着也是闲着,有哪些副业可以推荐?

每天5点就下班了,闲着也是闲着,有哪些副业可以推荐?

今天整理了36个搞钱APP 可以先接触学习看看,然后选定一个感兴趣的方向去精进 要知道机会不是一下子来临的, 而一定是你前期做了很多准备 每天进步一点点,就像滚雪球一样 希望所以女生,能够在2024年提升自己, 立下一个新的搞钱Flag吧…

请问什么软件支持看电视直播?

请问什么软件支持看电视直播?

2024年9月6日最新更新:本文列举的 所有看电视直播、或流媒体影视资源点播的软件,我这两天又重新梳理成最新版本,最大程度保证可用性。获取方式见文末图片,或见评论。后续我也将持续更新,文章是旧的软件也会是新的,保证你拿到的都是最新可用版本。…

手机用久了,垃圾都在哪里,总是内存显示不够,还很卡,这可怎么解决?

手机用久了,垃圾都在哪里,总是内存显示不够,还很卡,这可怎么解决?

大家的手机在使用一段时间之后啊,是不是都会出现又卡又慢的情况,尤其是安卓手机,这种现象更是非常明显,而且很多朋友啊,也都知道手机之所以会出现这些问题,一般都是手机安装了大量软件,而这些软件在使用过程中会产生大量的缓存垃圾,因此啊时间久了就会…

为何 Linus 一个人就能写出这么强的系统,中国却做不出来?

为何 Linus 一个人就能写出这么强的系统,中国却做不出来?

我给你举个真实的例子。。 有一个人叫高伟东,在哈尔滨工作。在2012年做了一个APP。使用词根词缀背单词。名字叫: 词根词缀词典这个人编辑了2300余条词根,给10万多条单词建立了词根索引,整理了50多万条的单词记忆方法,包括新版本的诸多新…

发表评论

访客

看不清,换一张

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