- import java.util.*;
- class Person
- {
- private String name;
- Person(String name){
- this.name=name;
- }
- public String getName(){
- return name;
- }
- }
- class A extends Person
- {
- A(String name){
- super(name);
- }
- }
- public class Test
- {
- public static void main(String[] args)
- {
- TreeSet<Person> ts=new TreeSet<Person>(new MyCompare());
- ts.add(new Person("Person01"));
- ts.add(new Person("Person04"));
- ts.add(new Person("Person03"));
- TreeSet<A> ts1=new TreeSet<A>(new MyCompare());
- ts1.add(new A("A01"));
- ts1.add(new A("A04"));
- ts1.add(new A("A03"));
-
- printTS(ts1);
- }
- //为什么使用<? super A>就会出现找不到:方法 getName()
- //A类和A类的父类也都有getName()方法啊。
- public static void printTS(TreeSet<? super A> ts){
- for(Iterator<? super A> itr=ts.iterator();itr.hasNext();){
- System.out.println(itr.next().getName());
- //这里将getName(),改成toString()就不会有问题。
- //那么是不是可以理解编译时找A的父类不是找到Person,而是找到了Object
- //所以才没找到方法 getName()
- }
- }
- /*
- //使用<? extends A>就没有问题,因为A类中有getName()方法。
- public static void printTS(TreeSet<? extends A> ts){
- for(Iterator<? extends A> itr=ts.iterator();itr.hasNext();){
- System.out.println(itr.next().getName());
- }
- }
- */
- }
- class MyCompare implements Comparator<Person>
- {
- public int compare(Person o1,Person o2){
- return o2.getName().compareTo(o1.getName());
- }
- }
复制代码 |