有Person类,Student类和Worker类都继承Person,有Person比较方法类Comp,这个比较方法类Comp还能给Person子类用,
? 通配符。也可以理解为占位符。
泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限
下面是TreeSet的构造函数, 注意比较器Comparator中的通配符 ?
package test;
import java.util.*;
class Test {
public static void main(String[] args) {
TreeSet<Student> ts = new TreeSet<Student>(new Comp());
ts.add(new Student("abc03"));
ts.add(new Student("abc02"));
ts.add(new Student("abc06"));
ts.add(new Student("abc01"));
Iterator<Student> it = ts.iterator();
while (it.hasNext()) {
System.out.println(it.next().getName());
}
/**/
TreeSet<Worker> ts1 = new TreeSet<Worker>(new Comp());
ts1.add(new Worker("wabc--03"));
ts1.add(new Worker("wabc--02"));
ts1.add(new Worker("wabc--06"));
ts1.add(new Worker("wabc--01"));
Iterator<Worker> it1 = ts1.iterator();
while (it1.hasNext()) {
System.out.println(it1.next().getName());
}
}
}
/*
class StuComp implements Comparator<Student> {
public int compare(Student s1, Student s2) {
return s1.getName().compareTo(s2.getName());
}
}
class WorkerComp implements Comparator<Worker> {
public int compare(Worker s1, Worker s2) {
return s1.getName().compareTo(s2.getName());
}
}
*/
class Comp implements Comparator<Person> {
public int compare(Person p1, Person p2) {
return p2.getName().compareTo(p1.getName());
}
}
class Person {
private String name;
Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
return "person :" + name;
}
}
class Student extends Person {
Student(String name) {
super(name);
}
}
class Worker extends Person {
Worker(String name) {
super(name);
}
}