黑马程序员技术交流社区

标题: java泛型限定疑问求解 [打印本页]

作者: Jeik    时间: 2014-11-9 15:50
标题: java泛型限定疑问求解
代码如下其中实体数据关系DogSon继承Dog,Dog继承DogParent.
  1. //泛型的限定 <? super Dog> 表示的意思是?可以是dog或者dog的父类
  2.                 Collection<? super Dog> co4=new LinkedList<DogParent>();
  3.                 Collection<? super Dog> co5=new LinkedList<Dog>();
  4.                 co4.add(new Dog("阿忠",5));
  5.                 //co4.add(new DogParent("中兴",12));//为什么不能加?
  6.                
  7.                 co5.add(new Dog("a",1));
  8.                 //co5.add(new DogParent("爱国",12));//为什么不能加?
  9.                 System.out.println(co4.size());
  10.                
  11.                 //?是dog本身或者是它的子类
  12.                 Collection<? extends Dog> co6=new ArrayList<Dog>();
  13.                 Collection<? extends Dog> co7=new ArrayList<DogSon>();
  14.                 //co6.add(new Dog("b",3));
  15.                 //co6.add(new DogSon("c",4));//都不能加为什么?
复制代码

作者: cs8630323    时间: 2014-11-9 16:08
java核心思想 卷一 泛型--通配符  看完就懂了
作者: likeermei    时间: 2014-11-9 16:24
好问题  ,鄙人一直困惑在此。望哪位大神给个详细的解释
作者: a8851625    时间: 2014-11-9 17:55
你给的代码看不出你哪个是父类哪个是子类啊,你确定以下子父类的关系看看?
作者: Jeik    时间: 2014-11-9 18:04
cs8630323 发表于 2014-11-9 16:08
java核心思想 卷一 泛型--通配符  看完就懂了

java核心思想 。。没看过!
作者: zhangyangLengen    时间: 2014-11-9 18:51
<? extends E> <? super e>:主要用来限定集合中存放的类型;
<? extends E>:主要用在往集合中增加元素的时候,只能往集合中加入该类型e的子类或者本类;
Collection 类的函数 addAll(Collection<? extends E> c)

<? super e>:主要是用在从集合中取出数据时进行比较的时候:comparator比较器
TreeSet(Comparator<? super E> comparator)

作者: Rain2692    时间: 2014-11-9 18:57
你理解错了,把老毕的视频再看一遍吧,应该是这个<? super DogParent>,你试试。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2