A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 「AτS」 于 2016-3-30 12:42 编辑

今天看完了泛型上下边界的使用:
泛型固定下边界: <? super E>        本人以为是E类型及E的父类的类型
泛型固定上边界: <? extends E>    本人以为是E类型及E的子类的类型
然而在练习的时候碰到如下问题:  首先三个类继承关系如下:
  1. class God{
  2. }
  3. class Person extends God{
  4. }
  5. class Student extends Person {
  6. }
复制代码

然后定义一个集合,设定泛型上边界:  结果三个add方法下面都是红色波浪线....
  1. ArrayList<? extends Person> al =new ArrayList<>();
  2.                 al.add(new God()); //报错
  3.                 al.add(new Person()); /报错
  4.                 al.add(new Student()); //报错
复制代码
然后将泛型改为下边界: 结果是E类型及子类的添加都是成功的
  1. ArrayList<? super Person> al =new ArrayList<>();
  2.                 al.add(new God());  //报错
  3.                 al.add(new Person());
  4.                 al.add(new Student());
复制代码

这么一下弄得我懵了<? super Person>在我看来变成了上边界,就是Person类及下面的子类都能添加,应该是这么理解的么?
还有为什么<? extends Person>的时候是三个都添加失败?,好歹应该有一个吧
这个边界到底怎么理解呢,请大神解答一下,谢谢~



1 个回复

倒序浏览
自己顶一下,期待大神们能教教我呀
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马