本帖最后由 「AτS」 于 2016-3-30 12:42 编辑
今天看完了泛型上下边界的使用:
泛型固定下边界: <? super E> 本人以为是E类型及E的父类的类型
泛型固定上边界: <? extends E> 本人以为是E类型及E的子类的类型
然而在练习的时候碰到如下问题: 首先三个类继承关系如下:
- class God{
- }
- class Person extends God{
- }
- class Student extends Person {
- }
复制代码
然后定义一个集合,设定泛型上边界: 结果三个add方法下面都是红色波浪线....
- ArrayList<? extends Person> al =new ArrayList<>();
- al.add(new God()); //报错
- al.add(new Person()); /报错
- al.add(new Student()); //报错
复制代码 然后将泛型改为下边界: 结果是E类型及子类的添加都是成功的
- ArrayList<? super Person> al =new ArrayList<>();
- al.add(new God()); //报错
- al.add(new Person());
- al.add(new Student());
复制代码
这么一下弄得我懵了<? super Person>在我看来变成了上边界,就是Person类及下面的子类都能添加,应该是这么理解的么?
还有为什么<? extends Person>的时候是三个都添加失败?,好歹应该有一个吧
这个边界到底怎么理解呢,请大神解答一下,谢谢~
|
|