黑马程序员技术交流社区

标题: <? super E>泛型,能传入什么类型 [打印本页]

作者: 孙茜茜    时间: 2013-6-19 09:58
标题: <? super E>泛型,能传入什么类型
本帖最后由 Super_Class 于 2013-6-19 19:49 编辑
  1. //Person是Student和Worker的父类
  2. TreeSet<Worker> w=new TreeSet<Worker>(new Comp());
  3. TreeSet<Student> w=new TreeSet<Student>(new Comp());
  4. //而比较器是
  5. class  Comp implements Comparator<Person>{}
复制代码
问题1、定义比较器这句class Comp implements Comparator<Person>{}是不是等效于class Comp implements Comparator<? super Person>{},只做简写?
问题2、不是说<? super Person>表示Person和其父类吗,怎么能给他的子类用,想给子类用不是得<? extends Person>吗   ??

作者: 刘凯    时间: 2013-6-19 10:25
表示没看懂问题
作者: 张承富    时间: 2013-6-19 10:44
问题1,定义比较器这句class Comp implements Comparator<Person>{}是不是等效于class Comp implements Comparator<? super Person>{},只做简写?
应该是等效于class Comp implements Comparator<? extends Person>{},泛型上限

问题2,<? super Person>是给Person和其父类用,泛型下限
作者: 孙茜茜    时间: 2013-6-19 12:05
张承富 发表于 2013-6-19 10:44
问题1,定义比较器这句class Comp implements Comparator{}是不是等效于class Comp implements Comparator ...

如果按你这样理解我也就不用问了
api里这样写的

QQ截图20130619120333.jpg (54.43 KB, 下载次数: 0)

QQ截图20130619120333.jpg

作者: 刘茂林    时间: 2013-6-19 12:13
? super E

只能传入E 或者E的父类
作者: 孙茜茜    时间: 2013-6-19 13:02
经过群里热心同学解答,终于解决了,版主看到就改一下吧
作者: 袁梦希    时间: 2013-6-20 08:56
我看看有金币没
作者: 月时微    时间: 2013-6-20 13:18
这是泛型的一个实例:指的是向上造型向下是?super E向上造型一个泛型对象的引用例如,假设我们有很多箱子,每个箱子里都装有不同的水果,我们需要找到一种方法能够通用的处理任何一箱水果。更通俗的说法,A是B的子类型,我们需要找到一种方法能够将C<A>类型的实例赋给一个C<B>类型的声明。为了完成这种操作,我们需要使用带有通配符的扩展声明,就像下面的例子里那样:1List<Apple> apples = new ArrayList<Apple>();2List<? extends Fruit> fruits = apples;“? extends”是泛型类型的子类型相关性成为现实:Apple是Fruit的子类型,List<Apple> 是 List<? extends Fruit> 的子类型。现在我来介绍另外一种通配符:? super。如果类型B是类型A的超类型(父类型),那么C<B> 是 C<? super A> 的子类型:1List<Fruit> fruits = new ArrayList<Fruit>();2List<? super Apple> = fruits;
作者: 狐狸FMF    时间: 2014-8-13 12:58
好深奥的样子
作者: 狐狸FMF    时间: 2014-8-14 23:35
楼主威武霸气  真给力
作者: 黄小橙    时间: 2014-10-4 09:14
<? super Person>是可以传入person或者person的父类吧
作者: wujiemin    时间: 2014-10-8 09:37
领奖咯哈哈:P
作者: 彭小虎    时间: 2014-11-17 10:07
来拿黑马币的,太缺钱了
作者: Afridoce    时间: 2014-12-9 12:50
来拿黑马币的,太缺钱了
作者: 些许    时间: 2014-12-22 18:45
我还没学到泛型呢   才学到线程 飘过




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