- 泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
- ? extends E
表示类型的上界,向下限定,表示参数化类型的可能是E及其子类
- ? super E
表示类型的下界(Java Core中叫超类型限定),向上限定,表示参数化类型是E或E的超类型(父类型),直至Object。
? extends E
/*** 泛型固定上边界* ? extends E*/@Testpublic void demo1() {ArrayList<Person> list1 = new ArrayList<>();list1.add(new Person("张三", 23));list1.add(new Person("李四", 24));ArrayList<Student> list2 = new ArrayList<>();list2.add(new Student("王五", 25));list2.add(new Student("赵六", 26));list1.addAll(list2);}
? super E
TreeSet源码
表示传入当调用Comparator比较器中compare方法时,只能传入E或E的子类型
class CompareByAge implements Comparator<Person> {
@Override
public int compare(Person s1, Person s2) {
int num = s1.getAge() - s2.getAge();
return num == 0 ? s1.getName().compareTo(s2.getName()) : num;
}
}
@Test
public void demo2(){
TreeSet<Person> ts1 = new TreeSet<>(new CompareByAge());
ts1.add(new Person("张三", 33));
ts1.add(new Person("李四", 13));
ts1.add(new Person("王五", 23));
ts1.add(new Person("赵六", 43));
TreeSet<Student> ts2 = new TreeSet<>(new CompareByAge());
ts2.add(new Student("张三", 33));
ts2.add(new Student("李四", 13));
ts2.add(new Student("王五", 23));
ts2.add(new Student("赵六", 43));
System.out.println(ts2);
}
