pecs
- 全称是
Producer Extends Consumer Super
- 使用extends确定上界的只能是生产者,只能往外生产东西,取出的就是上界类型。不能往里塞东西。
- 使用Super确定下界的只能做消费者,只能往里塞东西。取出的因为无法确定类型只能转成Object类型看代码更好理解。
代码
List<? extends Number> numbers = new ArrayList();
numbers.add(4); //报错
Number number = numbers.get(1);//成功
List<? super Number> strs = new ArrayList<>();
strs.add(123);//成功
Number o = strs.get(1);//报错
具体说明
上界通配符(Upper Bounded Wildcards)
下界通配符(Lower Bounded Wildcards)
总结
- 如果要从集合中读取类型T的数据, 并且不能写入,可以使用 上界通配符(<?extends>)—Producer Extends。
- 如果要从集合中写入类型T 的数据, 并且不需要读取,可以使用下界通配符(<? super>)—Consumer Super。
- 如果既要存又要取, 那么就
不要使用
通配符。