java 泛型 PECS规则(Producer Extends Consumer Super)

本文详细解释了Java泛型中的PECS原则,即Producer Extends Consumer Super。通过示例展示了? extends T用于读取操作(Producer),保证安全取出;而? super T适用于写入操作(Consumer),确保添加元素时的类型安全。理解这一原则对于编写类型安全的Java代码至关重要。

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)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值