/**
* 通配符的使用
* 通配符:?
*/
public class GenericTest7 {
/**
* 类A 是 类B的父类,G<A> 和 G<B>是没有关系的,二者共同的父类是:G<?>
*/
@Test
public void test01() {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
List<String> list2 = new ArrayList<>();
list2.add("hi");
list2.add("hello");
List<Object> list3 = new ArrayList<>();
list3.add(1);
list3.add("bye");
showList(list);
showList(list2);
showList(list3);
List<?> listFather = null;
listFather = list;
listFather = list2;
listFather = list3;
}
private void showList(List<?> list) {
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
System.out.println(obj);
}
}
@Test
public void test02() {
List<String> list = new ArrayList<>();
list.add("AA");
list.add("BB");
List<?> listFather = null;
listFather = list;
//报错:add (capture<?>) in List cannot be applied to (java.lang.String)
//结论:添加(写入)对于List<?>不能向其内部添加数据,除了添加null;
//listFather.add("DD");
listFather.add(null);
//结论:获取(读取)对于List<?>允许读取数据,读取的数据类型为Object
Object obj = listFather.get(0);
System.out.println(obj);
}
}