Java泛型? extends E 和 ? super E
2015-09-27 11:03
471 查看
本文来源于:http://blog.csdn.net/hippoppower/article/details/4473991
//Apple Orange 都继承自Fruit类,同时Jonathan是Apple的子类 List<? extends Fruit> list = new ArrayList<Apple>(); //list.add(new Apple());Error //list.add(new Fruit());Error List<? super Fruit> list = new ArrayList<Apple>(); list.add(new Apple());//可以 list.add(new Fruit());//可以 List<? extends Fruit> list = new ArrayList<Apple>(); list中为什么不能加入Fruit类和Fruit类的子类呢,原因是这样的 List<? extends Fruit>表示上限是Fruit,下面这样的赋值都是合法的 List<? extends Fruit> list1 = new ArrayList<Fruit>(); List<? extends Fruit> list2 = new ArrayList<Apple>(); List<? extends Fruit> list3 = new ArrayList<Jonathan>(); 如果List<? extends Fruit>支持add方法的方法合法的话 list1可以add Fruit和所有Fruit的子类 list2可以add Apple和所有Apple的子类 list3可以add Jonathan和所有Jonathan的子类 这样的话,问题就出现了 List<? extends Fruit>所应该持有的对象是Fruit的子类,而且具体是哪一个 子类还是个未知数,所以加入任何Fruit的子类都会有问题,因为如果add Apple 的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan>() Apple的加入肯定是不行的,如果 如果add Jonathan 的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan的子类>() Jonathan的加入又不合法,所以List<? extends Fruit> list 不能进行add 而List<? super Fruit> list 表示list持有的对象是Fruit的父类,下限是 Fruit,所以list中add Fruit或Fruit的子类是没有问题的 <pre name="code" class="java">public class Demo { public static void main(String[] args) { //List持有的对象是fruit的子类,但是子类与子类之间并不兼容 List<? extends Fruit> list = new ArrayList<>(); // list.add(new Apple());编译错误 //List持有的对象是fruit的父类,下限是fruit, //既然存储的是fruit的父类,那么就能存储fruit以及fruit的子类 //因为父类对象的引用总可以指向子类对象 List<? super Fruit> list2 = new ArrayList<>(); list2.add(new Apple()); list2.add(new SmallApple()); } } class Fruit{ } class Apple extends Fruit{ } class SmallApple extends Apple{ }
</pre><pre name="code" class="java">
相关文章推荐
- static使用
- java中泛型的应用
- 【转】JAVA输出内容打印到TXT以及不同系统中如何换行
- 【转】如何在eclipse下配置Heritrix
- myeclipse 2015 stable2.0 激活
- Java的OutOfMemory问题
- spring_150907_sqlmapclientdaosupport_getSqlMapClient
- eclipse查看jar包源代码乱码问题解决
- eclipse中导入项目后提示错误:The project was not built due to"Could not delete'/文件夹路径名
- Java RandomAccessFile用法
- 排序算法之归并排序(JAVA)
- 二维数组的定义问题(java)
- Struts2的getServletContext().getRealPath("/WEB-INF")报空指针异常问题
- 学习java的乐趣
- Java编程思想第五章总结--初始化与清理
- java实战
- 韩顺平 java 第21讲、第22讲、第23讲、第24讲 集合
- Eclipse提交svn错误svn E210003 connection refused by the server
- java虚拟机参数
- Java_基础_参数传递