有限制条件的通配符的使用

有限制条件的通配符的使用

形式

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);
    }

}
posted @ 2022-06-07 21:44  Oh,mydream!  阅读(43)  评论(0编辑  收藏  举报