• 泛型通配符<?>

任意类型,如果没有明确,那么就是Object以及任意的Java类了

  • ? extends E

表示类型的上界,向下限定,表示参数化类型的可能是E及其子类

  • ? super E

表示类型的下界(Java Core中叫超类型限定),向上限定,表示参数化类型是E或E的超类型(父类型),直至Object。

? extends E

  1. /**
  2. * 泛型固定上边界
  3. * ? extends E
  4. */
  5. @Test
  6. public void demo1() {
  7. ArrayList<Person> list1 = new ArrayList<>();
  8. list1.add(new Person("张三", 23));
  9. list1.add(new Person("李四", 24));
  10. ArrayList<Student> list2 = new ArrayList<>();
  11. list2.add(new Student("王五", 25));
  12. list2.add(new Student("赵六", 26));
  13. list1.addAll(list2);
  14. }

? super E

TreeSet源码
表示传入当调用Comparator比较器中compare方法时,只能传入E或E的子类型
image.png

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);
    }