<? extends Fruit>与<? super Apple>的理解
来源:互联网 发布:阿里云购买云服务器 编辑:程序博客网 时间:2024/06/07 13:43
该文章主要讲述<? extends Fruit>与<? super Apple> 使用add()前者编译报错和后者可以运行通过的原因。
类继承关系如下:
class Fruit{}class Apple extends Fruit{}class Jonathan extends Apple{}class Orange extends Fruit{}先说<? extends Fruit>,? 代表了某一类型,? extends Fruit 则表示继承自Fruit的某一类型,是不确定的。在此?可以是Apple也可以是Orange。
List<? extends Fruit> list = new ArrayList<>(); 该list表示,存放某一继承Fruit类的实例的List。list.add()方法除了存放null以外,无论是Apple还是Fruit都会在编译的时候报错。
举个栗子,?是Apple表示现在list可以存放Apple及其子类,但是Orange也是满足 ? extends Fruit的条件,所以应当也可以存放进list,这样之前list内只能放Apple及其子类,现在又能放Orange就产生矛盾,故add()方法不可以存放除了null以外的实例,所以在编译期就报错了。还要注意的是在List源码内只要参数带泛型比如set()都是会在编译器报错。
再说<? super Apple>,这个就比较好理解了。它提供了一个下界是Apple,?可代表所有是Apple的父类。
List<? super Apple> list = new ArrayList<>();该list就可以使用带泛型的方法,比如add(),注意可以存放Apple及其子类的实例。无论?是什么类型,只要Apple继承了该?,就能存放Apple及其子类的实例。但是不能存放Apple以外的实例比如Orange。
阅读全文
0 0
- <? extends Fruit>与<? super Apple>的理解
- java继承extends与super关键字理解
- Java泛型中extends和super的理解
- 泛型中super与extends的形象解释
- <? extends T> 与 <? super T>的区别
- 泛型中super与extends的形象解释
- Java泛型<? extends Person>和<? super Man>的理解
- Java泛型 extends,super和通配符的理解
- 关于<T extends Comparable<? super T>>的理解
- Java中<? extends T>和<? super T>的理解
- Java中<? extends T>和<? super T>的理解
- Java中<? extends T>和<? super T>的理解
- Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同?
- Java 泛型 <? super T> 中 super 怎么 理解<?与 extends> 有何不同?
- Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同?
- Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同?
- Java泛型 <? extends ...>与<? super ...>
- ? extends T 与 ? super T
- EditPlus实现自动提示和跳转,下载配置CTags,附上下载链接
- Android studio配置copyright插入版权信息的详细教程
- ml-拟合浅谈
- OPENCV 1. opencv和 VS 2010的安装
- JavaScript对象中属性的getter和setter方法
- <? extends Fruit>与<? super Apple>的理解
- JAVA配置环境变量
- Ubuntu 下 Thunderbird 和 exchange 配置
- 2017初二上期中考试总结
- 构建深度学习环境(基于Pycharm/Python/Tensorflow/Linuxx系统/VMware的开发平台构建)
- iOS使用NSNotificationCenter通知崩溃
- 解决 Tomcat 端口被占用(Tomcat port is occupied)
- jieba结巴分词--关键词抽取
- easyUI