Java泛型通配符<? extends T>与<? super T>

1、<? extends T>:参数的类型可能是T或者T的子类。

   <? super T>:参数的类型可能是是T或T的父类。

   用extends还是super遵循PECS原则。实例化的时候应该指定具体的类型,不指定会有警告。例如:

    List<? extends Fruit> flist = new ArrayList<Apple(T和子类类型)>();

    List<? super Fruit> flist = new ArrayList<Fruit(T和父类类型)>();

2、PECS:(Producer Extends Customer Super)

   生产者extends,频繁往外读取内容;消费者super,经常往里面插入数据。

3、<? extends T>:不能add,可以get;<? super T>不能get,可以add。get和add的都是T和T的子类

从安全性和不确定性两个方面考虑:

<? extends T>:编译器无法确定List所持有的类型,所以无法安全的向其中添加对象,比如实例化类型为Apple,加入的为Fruit,发生强转类型错误。get的时候得到父类或者子类强转父类不会有安全问题。

<? super T>:列表的类型最少都是一个T,所以可以往里添加T和T的子类,比如添加apple,但是get的时候无法确定返回的类型是T还是T的父类,父类强转子类不能安全转换。





  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值