PECS 就是当你需要遍历某一个类型和子类的集合数据时,集合相当于生产者,此时泛型使用 <? extends T>
。当需要往某个类型的集合添加类和子类实例时,集合相当于消费者,此时泛型使用 <? super T>
。
每年八九月份的瓜是最甜的。
对 Java 泛型 PECS 的讲解中,大多是从参数使用的角度来的,本文结合调用传值和参数使用对比来看 PECS 的两种情况。
当我们想要遍历读取某个集合时,需要使用 <? extends T>
,用上面类型为例,为了方便查看编译时的错误,直接上截图:
当使用 <? extends Watermelon>
,类型的上限是 Watermelon
,从集合取出的值默认就是 Watermelon
,因此也能用父类定义去引用,所以方法前三个赋值正确, KylinWatermelon
错误