黑马程序员技术交流社区

标题: 关于泛型的限定 [打印本页]

作者: 李会成    时间: 2013-2-16 16:45
标题: 关于泛型的限定
本帖最后由 李会成 于 2013-2-18 11:34 编辑
  1. public static void iteratorToou(List< ? extends Prerson > arr)      //  为什么我这里写泛型限制会出问题
  2.         {
  3.                                             Iterator<rerson> it = arr.iterator();
  4.                                             while (it.hasNext()) ;
  5.                                   Prerson p = it.next();
  6.                                                            System.out.println(p.getName() + "......" + p.getAge();
  7.          }
  8.         }
  9. }
  10.      1.(List< ? extends Prerson > arr)   我在这里写泛型限定,为什么会报错,

  11.       类型不匹配:不能从 Iterator<capture# 1- of  ? extends Prerson> 转换为 Iterator<rerson>

  12.     2.求高人解释一下  这个泛型限定  看视频没有看懂~

  13.    public static <T extends Comparable<? super T>> void sort(List<T> list)
复制代码

作者: 王钊    时间: 2013-2-16 19:13
1.iterator中的泛型限定应该和List<? extends Person>一致,因为List中存储的元素应该是Person的子类,那么
取出List元素用iterator的泛型限定也应该是Person的子类。
2.这是一个泛型方法,<T extends Comparable<? super T>>说明T应该是一个实现了Comparable接口的类,并且
从Comparable<? super T>可以得出,Comparable接口可以比较T类型的父类,比较的范围更大。
举个例子你就明白了:
比方说,你想往List集合中放入Student,就以年龄作为排序比较规则吧,这时T不就是Student了吧,而Student又是Person的子类,
所有人都可以用年龄做比较,所以Comparable接口的泛型就可以写成Person
这不就是Student实现了Comparable接口,而Comparable接口可以接受Student父类也就是Person,即该方法
public static <T extends Comparable<? super T>> void sort(List<T> list)
就像
public static <Student extends Comparable<Person super Student>> void sort(List<Student> list)




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