List<? extends T>与List<? super T>的区别

(1)?

?表示类型通配符,即具体传什么参数类型,在List定义时不用考虑。

(2)<T>

这里的 <> 表示泛型,T 表示泛型中装载的类型为T类型,等到需要的时候,我们可以具体这个 T。我们在使用动态数组实现 ArrayList 的时候,如果希望这个 ArrayList 不仅仅支持一个类型的话,我们可以给这个 ArrayList 定义泛型,泛型中存放的是T类型。在实际创建出这个 ArrayList 对象时,我们可以指定泛型中的具体类型。

(3)<? extends T>

类型上界,这里的 ? 可以是 T 类型或者 T 的子类类型。

(4)<? super T>

类型下界,这里的?可以是T类型或者T的超类类型,但不代表我们可以往里面添加任意超类类型的元素。

在List中引入通配符界限限制的假设

不管是List还是List,如果能读取元素,那么这个元素一定能转化为 T 类型,注意不是强制类型转换,强制类型转换是容易出现问题。

显然List内都是 T 的子类类型,能够向上转型为 T 类型,因此该 list 可以读取。

而List内可以是 T 的超类类型,T 的超类转 T 是有可能出现异常的。

那我干脆转化成 Object 类型不好吗,所有类的基类都是 Object,不属于强制类型转换。哥们,转换成 Object 了,那你还图个啥?转换为 Object 类型是没有意义的。

假设List能添加元素,那么需要满足添加的任意元素需要能够直接转化成 T 的任何一个子类,T 的子类 A 和子类 B 是不能相互转化的,显然该 list 是不能添加元素的。

假设List能添加元素,那么同样需要满足添加的任意元素能够直接转化成 T 的任何一个超类。此时添加 T 的子类元素就能满足该要求,因为 T 的任意子类可以向上转型成 T 的任何超类。

List<? extends T>

List是被设计用来读取数据的泛型,并且只能读取类型为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值