java 泛型 PECS规则(Producer Extends Consumer Super)
Posted QQ_851228082
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 泛型 PECS规则(Producer Extends Consumer Super)相关的知识,希望对你有一定的参考价值。
PECS
关于泛型有个PECS(Producer Extends Consumer Super)规则,说的是
List<? extends Person> list = new ArrayList();
//编译错误,不允许往里添加元素,
list.add(new Person());
//编译通过
Person person = list.get(0);
List<? super Person> list2 = new ArrayList<>();
//编译通过
list2.add(new Person());
//只能赋值给Object类型,无法确定具体类型
Object o = list2.get(0);
Producer Extends
这是因为? extends Person
表示Person的某一个子类,可能是Man也可能是Woman、甚至就是Person,如果往List<Man>添加Person肯定是不行的,类型不安全。但取出来的元素可以赋值给Person
Person p = list.get(0);
往外取是producer,所以Producer Extends,简称PE
Consumer Super
? super Person
,正好相反,表示Person及Person的父类,所以可以往里添加 Person及其子类,因为Person及其子类肯定是? super Person
的子类,所以添加的元素类型是可以确保安全的。
而取时,因为无法确保类型,所以只能赋值给Object类型。添加是Consumer操作,所以是Consumer Super,简称CS;
这两种情况合起来就是PECS(Producer Extends Consumer Super)
以上是关于java 泛型 PECS规则(Producer Extends Consumer Super)的主要内容,如果未能解决你的问题,请参考以下文章