泛型List<? extends SuperClass>、List<? super SubClass>是什么含义?怎么使用?
一、泛型的分类
1、无限通配符List<?> list
2、上界通配符List<? extends SuperClass>
3、下界通配符List<? super SubClass>
二、无限通配符List<?> list
这种就是开发中使用最多的,不详细讲解
三、上界通配符List<? extends SuperClass>
以List<? extends String>为例来讲解一下含义:
这是个List,其中的数组指以String为上界的类型,你不可以往这个数组插入String类型,因为你这有可能是个SubString的数组,你只能保证读出来的数据是String类型的,因此只能作为生产者,里面的数据可以被消费
比如:List<? extends 水果>
你知道这个容器可能是:香蕉List,也可能是苹果List,但肯定是某一种水果的List。你不能放水果进入是因为,假如你放的是水果(香蕉),但实际上是个苹果List,就会在运行期报异常。同样道理你也不能放水果(苹果)进入。这个容器不能放任何类型的东西进去,因为没有下界,你不知道下界,你唯一知道的是从这个容器里拿出来的是水果。这是个产出水果的容器(生产者),里面的元素拿出来就是水果(可以直接当做水果消费掉)。也就是说,这个数组只能被消费,不能生产数据,也就是不能往里面存数据
四、下界通配符List<? super SubClass>
下界<? super T>
不影响往里存,但往外取只能放在Object对象里。使用下界<? super Fruit>
会使从盘子里取东西的get( )方法部分失效,只能存放到Object对象里。set( )方法正常。
Plate<? super Fruit> p=new Plate<Fruit>(new Fruit()); //存入元素正常 p.set(new Fruit()); p.set(new Apple()); //读取出来的东西只能存放在Object类里。 Apple newFruit3=p.get(); //Error Fruit newFruit1=p.get(); //Error Object newFruit2=p.get();
五、PECS原则
最后看一下什么是PECS(Producer Extends Consumer Super)原则,已经很好理解了:
① 频繁往外读取内容的,适合用上界Extends。
② 经常往里插入的,适合用下界Super。
注:本片内容汇总来源于网络各位博主的总结,对他们表示感谢,如果问题还望指正!
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个 java 空指针异常的解决过程
· 揭开 SQL Server 和 PostgreSQL 填充因子的神秘面纱
· 没有调度器的协程不是好协程,零基础深入浅出 C++20 协程
· 别做抢活的导演:代码中的抽象层次原则
· 从 Redis 客户端超时到 .NET 线程池挑战
· 今年失业的程序员兄弟姐妹们,你们都去干什么了?
· TinyEditor v4.0 alpha 版本发布:表格更强大,表情更丰富,上传体验超乎想象!
· .NET周刊【7月第2期 2025-07-13】
· 圆方树学习笔记 —— 一种关于点双连通分量的思考方式
· MySQL 17 如何正确地显示随机消息?