欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

理解Java泛型中的extends和super: 一个实用的指南

最编程 2024-07-27 21:21:17
...

1、supser:表明容器元素类型是super关键字后面的类或父类

List<? super Sub> list = new ArrayList<Super>();

list.add(new Sub());//可以

list.add(new SubSub());//可以

list.add(new Super());//编译错误,由于无法确定具体的父类,导致不能向其中添加任何具体的父类

Sub sub = list.get(0);//编译错误,由于无法确定具体的父类,导致不能转换成具体的父类

Object obj = list.get(0);//可以

2、extends:表明容器元素类型是extends关键字后面的类或子类

List<? extends Super> list = new ArrayList<Super>();

Super s = list.get(0);//可以

list.add(new Super());//编译错误,由于无法确定具体的子类,导致不能向其中添加任何具体的子类

总结:PECS原则(Producer Extends,Consumer Super)

如果要从集合中读取类型T的数据,并且不能写入,可以使用 ? extends 通配符;(Producer extends)
如果要从集合中写入类型T的数据,并且不需要读取,可以使用 ? super 通配符;(Consumer super)
如果既要存又要取,那么就不要使用任何通配符。

原文地址:https://www.cnblogs.com/qwdong/p/11249635.html

推荐阅读