【Java笔记】泛型通配符<?>的使用

在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义

通配符的使用

如果类 A 是类 B 的父类,G <A> 和 G <B> 是没有关系的,二者共同的父类是:G <?>

import org.junit.Test;
import java.util.Iterator;
import java.util.List;

public class TongPeiFuTest {
    @Test
    public void test(){
        List<Object> list1 = null;
        List<String> list2 = null;
        List<?> list = null;
        list = list1;
        list = list2;
    }
    public void print(List<?> list){
        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println(obj);
        }
    }
}

使用通配符后数据的读取和写入

添加或写入:对于 List <?> 就不能再向其内部添加数据,除了添加 null 之外

获取或读取:允许读取数据,读取的数据类型是 Object

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;

public class TongPeiFuTest {
    @Test
    public void test(){
        List<String> list = new ArrayList<>();
        list.add("AA");
        list.add("BB");
        list.add("CC");
        List<?> list1 = new ArrayList<>();
        list1 = list;
        //写入
        list1.add(null);
        //读取
        Object o = list.get(0);
        System.out.println(o);
    }
}

>>> AA

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

? extends A : G<? extends A> 可以作为 G <A> 和 G <B> 的父类,其中 B 是 A 的子类 ? super A : G<? super A> 可以作为 G <A> 和 G <B> 的父类,其中 B 是 A 的父类
//假设我们定义了 Person 类,Student 类继承 Person 类,以下注释的情况编译不通过
import org.junit.Test;
import java.util.List;

public class TongPeiFuTest {
    @Test
    public void test() {
        List<? extends Person> list1 = null;
        List<? super Person> list2 = null;
        List<Student> list3 = null;
        List<Person> list4 = null;
        List<Object> list5 = null;
        list1 = list3;
        list1 = list4;
//        list1 = list5;
//        list2 = list3;
        list2 = list4;
        list2 = list5;
        list1 = list3;
        Person p = list1.get(0);
//        Student s = list1.get(0);
        list2 = list4;
        Object obj = list2.get(0);
        list2.add(new Person());
        list2.add(new Student());    
    }
}
经验分享 程序员 微信小程序 职场和发展