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)的主要内容,如果未能解决你的问题,请参考以下文章

Java 泛型的读写规则:PECS

Java 泛型的读写规则:PECS

Java 泛型的读写规则:PECS

Java泛型中的PECS原则

Java泛型中的PECS原则

java泛型-PECS