List与List
List
通配符:
<?>
通配符的读取和写入的要求:
对于list<?> 不能在添加数据: list.add()不行,除了添加Null之外
读取:(只能读取到Object)
有限制条件的通配符的使用:
package TongPeiFu;import org.junit.Test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class test { @Test public void test(){ List list1 = null; List list2 = null; List<?> list = null; list = list1; list = list2; List list3 = new ArrayList<>(); list3.add("aa"); list3.add("bb"); list3.add("cc"); list = list3; } public void show(List<?> list){ Iterator<?> iterator = list.iterator(); while (iterator.hasNext()){ Object obj = iterator.next(); System.out.println(obj); } } @Test public void test2(){ List<? extends Person> list1 = null; List<? super Person> list2 = null; List list3 = null; List list4 = null; List list5 = null;// ? extends Person 此时?指Person类的子类或Person类本身,不能时Person类的父类(Object) list1 = list3; list1 = list4;// list1 = list5;// ? super Person同理;// 接受数据 list3 = new ArrayList(); list4 = new ArrayList(); list5 = new ArrayList(); list1= list4;// Student st = list1.get(0); list1的泛型是 ?extends Person的,所以最小只能用Person接收 list2 = list3;// list2 泛型结构为<? super Person>只能用Object的对象接受 Object obj = list2.get(0);// 写入数据// 对于list1来讲: 其泛型结构是Person的子类,所以不确定// list1.add(new Student()); 不可以// list1.add(new Person()); 不可以// 对于list2来讲:其泛型结构是Person的父类,所以Person类及其子类都可以写入 list2.add(new Person()); list2.add(new Student());// list2.add(new Object()); 不可以 }}class Person{}class Student extends Person{}