有限制条件的通配符的使用
有限制条件的通配符的使用
形式
List<? extends Person> // 列表中可以装Person类及其子类(负无穷,Person]
List<? super Person> // 列表中可以装Person类及其父类[Person,正无穷)]
要点技巧
根据元素的范围判段其添加数据和读取数据的类型
添加数据类型看最小值,读取数据类型看最大值
List<? extends Person> 元素范围(负无穷,Person] 因为它的元素是Person类的子类,没有最小值,所以无法往里面添加数据,可以读取Person及其父类
List<? super Person> 元素范围 [Person,正无穷) 因为它的元素是Person类的父类,所以可添加数据类型为Person及其子类,可以读取Object
实践
package com.atguigu.generic;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
import com.example.oop.demo03.Person;
import com.example.oop.demo03.Student;
/**
* 功能描述
*
* @since 2022-05-26
*/
public class GenericInheriteTest {
public void test4() {
List<? extends Person> l1 = null;
List<? super Person> l2 = null;
// 添加数据类型看范围的最小值
// 添加数据 l1无法添加任何类型的数据,因为它的元素是Person类的子类,(负无穷,Person],没有最小值
// l1.add();
// 添加数据 l2可添加Person类及其子类,因为它的元素是Person类的超类,[Person,正无穷),没有最小值
l2.add(new Person());
l2.add(new Student());
// 读取类型看范围的最大值
// 读取都可以读
Person person = l1.get(0);
Object obj = l1.get(0);
Object object = l2.get(0);
l1.get(0);
}
}