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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jeik 中级黑马   /  2014-11-9 15:50  /  1042 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下其中实体数据关系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));//都不能加为什么?
复制代码

6 个回复

倒序浏览
java核心思想 卷一 泛型--通配符  看完就懂了
回复 使用道具 举报
好问题  ,鄙人一直困惑在此。望哪位大神给个详细的解释
回复 使用道具 举报
你给的代码看不出你哪个是父类哪个是子类啊,你确定以下子父类的关系看看?
回复 使用道具 举报
cs8630323 发表于 2014-11-9 16:08
java核心思想 卷一 泛型--通配符  看完就懂了

java核心思想 。。没看过!
回复 使用道具 举报
<? extends E> <? super e>:主要用来限定集合中存放的类型;
<? extends E>:主要用在往集合中增加元素的时候,只能往集合中加入该类型e的子类或者本类;
Collection 类的函数 addAll(Collection<? extends E> c)

<? super e>:主要是用在从集合中取出数据时进行比较的时候:comparator比较器
TreeSet(Comparator<? super E> comparator)
回复 使用道具 举报
你理解错了,把老毕的视频再看一遍吧,应该是这个<? super DogParent>,你试试。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马