通配符的使用

通配符的使用

什么是通配符?

通配符即? ,作为集合类的元素可以匹配任何引用类型
作用,可以使代码更简洁

要点总结

通配符的使用

List<?>
Map<?,?>

List<?>是List、List等各种泛型List的父类

读取
元素为通配符类型的集合,允许读取

写入
元素为通配符类型的集合,不允许写入

实践

package com.atguigu.generic;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.junit.Test;

/**
 * 功能描述
 *
 * @since 2022-05-26
 */
public class GenericInheriteTest {
    /**
     * 泛型的继承关系研究
     */
    @Test
    public void test1() {
        Object n1 = null;
        String n2 = null;
        // 子类可以直接赋值给父类
        n1 = n2;

        List<Object> n3 = null;
        List<String> n4 = null;
        // 编译报错 A继承于B G<A> 和G<B>没有继承关系
        // n3 = n4;

        ArrayList<Object> n5 = null;
        // A继承于B A<G> 继承于B<G>
        n3 = n5;
    }

    /**
     * 通配符的使用 A继承于B G<A> 和G<B>没有继承关系,但两者都继承于G<?>
     */
    @Test
    public void test2() {
        List<Object> n1 = null;
        List<String> n2 = null;

        List<?> n = null;
        n = n1;
        n = n2;

//        print(n1);
//        print(n2);

        List<String> list3 = new ArrayList<>();
        list3.add("AA");
        list3.add("BB");
        list3.add("CC");

        n = list3;
        // 对于List<?> 就不能向其内部添加数据,除了添加null,相当于不能添加,没事不会往里面加null
        n.add(null);

        // 获取(读取) ,对于List<?>,允许读取数据,读取的数据类型为Object
        Object o = n.get(0);
        System.out.println(o);

    }

    public void print(List<?> list) {
        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
        }
    }

}

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