首页 > 其他 > 详细

泛型List<? extends SuperClass>、List<? super SubClass>是什么含义?怎么使用?

时间:2020-10-18 22:41:23      阅读:43      评论:0      收藏:0      [点我收藏+]

一、泛型的分类

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。

 

 

注:本片内容汇总来源于网络各位博主的总结,对他们表示感谢,如果问题还望指正!

泛型List<? extends SuperClass>、List<? super SubClass>是什么含义?怎么使用?

原文:https://www.cnblogs.com/codeXi/p/13836700.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!