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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-6-6 18:29  /  1039 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. class  Demo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //TreeSet(Comparator<? super E> comparator)
  7.                 TreeSet<Student> ts = new TreeSet<Student>(new CompareByName());

  8.                 ts.add(new Student("s1"));
  9.                 ts.add(new Student("s3"));
  10.                 ts.add(new Student("s2"));
  11.                 ts.add(new Student("s0"));

  12.                 System.out.println(ts);

  13.         }
  14. }
  15. class CompareByName implements Comparator<Person>  //<Person> 写成<? extends Person>为什么不能通过
  16. {
  17.         public int compare(Person s1,Person s2)
  18.         {
  19.                 return s1.getName().compareTo(s2.getName());
  20.         }
  21. }


  22. class Person
  23. {
  24.         private String name;
  25.         Person(String name)
  26.         {
  27.                 this.name = name;
  28.         }
  29.         public String getName()
  30.         {
  31.                 return name;
  32.         }
  33.         public String toString()
  34.         {
  35.                 return "name:"+name;
  36.         }
  37. }
  38. class Student extends Person
  39. {
  40.         Student(String name)
  41.         {
  42.                 super(name);
  43.         }
  44.        
  45. }
复制代码
问题是在标注的地方为什么<Person>不能写成<? extends Person>,如果要这样写,怎么改动程序呢??

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1 淡定

查看全部评分

2 个回复

倒序浏览
楼主,如果有机会可以查一下JDK API
java.util 包中
接口 Comparator<T>,他中的泛型只能一个确切的对象,而不是可以继承父类的子类.
public interface Comparator<T>比较函数强行对某些对象 collection 进行整体排序。
可以将 Comparator 传递给 sort 方法(如 Collections.sort),从而允许在排序顺序上实现精确控制。
还可以使用 Comparator 来控制某些数据结构(如 TreeSet 或 TreeMap)的顺序。

至于楼主的意思可能把他误以为是方法了.
这是我查找API官方的方法:
Comparator<? super K> comparator()
          返回用于对此映射进行排序的比较器,如果此映射使用它的键的自然顺序,则返回 null。
Comparator<? super E> comparator()
          返回用于确定已排序 set 顺序的比较器,或者,如果此树 set 使用其元素的自然顺序,则返回 null。
这个方法还有几个类中有,是java.util.concurrent.PriorityBlockingQueue.comparator()
java.util.PriorityQueue.comparator()
java.util.SortedMap.comparator()
java.util.SortedSet.comparator()
java.util.TreeMap.comparator()
java.util.TreeSet.comparator() .
这些方法都可以像楼主使用的那样泛型中使用继承父类的子类或者是父类本身.


评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
龙秋地 发表于 2012-6-6 18:41
楼主,如果有机会可以查一下JDK API
java.util 包中
接口 Comparator,他中的泛型只能一个确切的对象,而不是 ...

谢谢,明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马