/**
* 有限制条件的通配符的使用
*/
public class GenericTest9 {
/**
* 结论:
* ? extends A :
* G<? extends A> 可以作为G<A> 和 G<B>的父类,其中B是A的子类
* ? super A :
* G<? super A> 可以作为G<A> 和 G<B>的父类,其中B是A的父类
*/
@Test
public void test01() {
List<? extends Person> list = null;
List<? super Person> list2 = null;
List<Man> list3 = new ArrayList<>();
list3.add(new Man("AA", 10));
List<Person> list4 = new ArrayList<>();
list4.add(new Person("AA"));
List<Object> list5 = new ArrayList<>();
list = list3;
// list = list4;
//list5 不能 自动向上转型为list
// list = list5;
Person person = list.get(0);
//编译不通过
// Man man = list.get(0);
//list3 不能 自动向上转型为list2
// list2 = list3;
list2 = list4;
list2 = list5;
Object object = list2.get(0);
//编译不通过
// Person p = list2.get(0);
//写入数据:
// 编译都不通过
// list.add(new Man("BB"));
// list.add(new Person());
// list.add(new Object());
list2.add(new Man("CC"));
list2.add(new Person());
}
}
class Person {
String name;
public Person() {
}
public Person(String name) {
this.name = name;
}
}
class Man extends Person{
Integer age;
public Man(String name) {
super(name);
}
public Man(String name, Integer age) {
super(name);
this.age = age;
}
}