通配符的使用

通配符的使用

什么是通配符?

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

要点总结

通配符的使用

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 @   Oh,mydream!  阅读(357)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示