List<? super E> 与List<? extends E>Add方法说明
List<? super E>: 可以添加E的子类元素
<? extends E>:不可以添加任何元素
public static class Person{}
public static class Man extends Person{}
public static class Woman extends Person{}
public static class Boy extends Man{}
public static void main(String[] args) {
ArrayList<? super Man> superList = new ArrayList<Person>();
//只能添加本身类与其子类,因为无论添加什么,都是Person的子类,不会报错
superList.add(new Man());//成功
superList.add(new Boy());//成功
superList.add(new Woman());//报错
superList.add(new Person());//报错
ArrayList<? extends Man> extendList = new ArrayList<Boy>();
//不成添加,如下所示,理论上只能添加BOY的子类,但如果添加Man,就不符合要求,JAVA无法判断,所以就禁止
extendList.add(new Man());//报错
extendList.add(new Boy());//报错
List<?> list = new ArrayList<Man>();
list.add(new Man());//报错
}