欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

泛型在继承方面的体现与通配符

时间:2023-08-07

List与List,并不具备父子类关系

List与ArrayList 存在父子类关系

通配符:

<?>

通配符的读取和写入的要求:

对于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{}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。