通配符

简介: 通配符

总结于尚硅谷学习视频

GenericTest 类

package com.day0310_1;
import org.junit.jupiter.api.Test;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 *
 * 1.泛型在继承方面的体现
 *  类A是类B的父类,G<A>和G<B>二者不具备子父类关系,二者是并列关系。
 *  补充:类A是类B的父类,A<G> 是 B<G>的父类
 *
 * 2.通配符的使用
 *
 *
 */
public class GenericTest {
    /*
     1.泛型在继承方面的体现
     */
    @Test
    public void test1(){
        Object obj=null;
        String str=null;
        obj=str;
        Object[] arr1=null;
        String[] arr2=null;
        arr1=arr2;
        List<Object> list1=null;
        List<String> list2=null;
        //此时的list1和list2的类型不具备子父类关系
//        Incompatible types
//        list1=list2;
        /*
         假设list1=list2
         list1.add(123);导致混入非String的数据,出错。
        */
        show(list1);
        show1(list2);
    }
    public void show1(List<String> list){
    }
    public void show(List<Object> list){
    }
    @Test
    public void test2(){
        AbstractList<String> list1=null;
        List<String> list2=null;
        ArrayList<String> list3=null;
        list1=list3;
        list2=list3;
        List<String> list4=new ArrayList<>();
    }
    /*
     2.通配符的使用
        通配符:?
        类A是类B的父类,G<A>和G<B>二者是并列关系,二者共同的父类是:G<?>
     */
    @Test
    public void test3(){
        List<Object> list1=null;
        List<String> list2=null;
        List<?> list=null;
        list=list1;
        list=list2;
//        print(list1);
//        print(list2);
        //
        List<String> list3=new ArrayList<>();
        list3.add("AA");
        list3.add("BB");
        list3.add("CC");
        list=list3;
        //添加:对于List<?>就不能向其内部添加数据。
        //除了添加null之外
//        list.add("DD");
//        list.add('?');
        list.add(null);
        //获取(读取):允许读取数据,读取的数据类型为Object。
        Object o = list.get(0);
        System.out.println(o);
    }
    public void print(List<?> list){
        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println(obj);
        }
    }
    /*
    3.有限制条件的通配符的使用
        ? extends A:
            G<? extends A> 可以作为G<A> 和G<B>的父类,其中B是A的子类
        ? super A:
            G<? extends A> 可以作为G<A> 和G<B>的父类,其中B是A的父类
     */
    @Test
    public void test4(){
        List <? extends Person> list1=null;
        List <? super Person> list2=null;
        List<Student> list3=new ArrayList<>();
        List<Person> list4=new ArrayList<>();
        List<Object> list5=new ArrayList<>();
        list1=list3;
        list1=list4;
//        list1=list5;
//        list2=list3;
        list2=list4;
        list2=list5;
        //读取数据:
        list1 =list4;
        Person p = list1.get(0);
        //编译不通过
//        Student s = list1.get(0);
        list2=list4;
        Object obj = list2.get(0);
//        Person obj = list2.get(0);
        //写入数据:
        //编译不通过
//        list1.add(new Student());
        //编译通过
        list2.add(new Person());
        list2.add(new Student());
    }
}

Person类

package com.day0310_1;
public class Person {
}

Student 类

package com.day0310_1;
public class Student extends Person {
}
相关文章
|
机器学习/深度学习 数据可视化 数据处理
深入浅出:Python中的异步编程探索Python在数据分析中的应用
在当今高速发展的互联网时代,异步编程已成为提升应用性能和响应速度的关键技术之一。本文旨在深入浅出地介绍Python中的异步编程概念、原理及其实践应用。通过对比同步与异步编程的不同,解析asyncio库的核心机制,并结合实例演示如何在Python项目中有效实现异步编程,本文希望能够帮助读者更好地理解异步编程的魅力,以及如何在自己的项目中运用这一强大的编程范式。 在当今数据驱动的时代,Python已经成为数据科学家和分析师的首选语言之一。本文将深入探讨Python在数据分析领域的实际应用,包括其在数据处理、可视化以及机器学习中的作用。我们将通过实例,展示如何利用Python的强大库(如Pand
135 28
|
监控 数据可视化 测试技术
什么是非功能性测试?
什么是非功能性测试?
461 0
|
应用服务中间件 网络安全 nginx
ELK系列二、Logstash读取Nginx日志写入ES中
ELK系列二、Logstash读取Nginx日志写入ES中
1930 1
ELK系列二、Logstash读取Nginx日志写入ES中
|
前端开发 JavaScript 中间件
阿里开源:Dawn - 基于「中间件和 Pipeline」的自动化构建工具
  Dawn 取「黎明、破晓」之意,原为「阿里云·业务运营团队」内部的前端构建和工程化工具,现已完全开源。它通过 pipeline 和 middleware 将开发过程抽象为相对固定的阶段和有限的操作,简化并统一了开发人员的日常构建与开发相关的工作。   采用中间件技术,封装常用功能,易于扩展,方便重用支持 pipeline 让多个 task 协同完成构建任务简单、一致的命令行接口,易于开发人员使用支持基于「中心服务」管理中间件和工程模板支持搭建私有中心服务,并统一下发构建规则,易于团队统一管理   依赖的环境、软件及其版本:   Node.js v7.6.0 及以上版本Mac/Linu
707 83
阿里云商标智能注册申请通过率、成功率高吗?被驳回概率大吗?
阿里云商标智能注册申请通过率、成功率高吗?商标智能注册申请价格便宜,但并不是价格便宜通过率就低,主要取决于商标申请人,阿里云只是个商标注册平台。
852 0
阿里云商标智能注册申请通过率、成功率高吗?被驳回概率大吗?
|
XML Java 数据格式
@Bean 注解
@Bean 注解
3252 5
|
运维 Devops 测试技术
DevOps实践-设计-部署流水线设计
在一个软件产品公司中,一般的基础设施会包括在每个产品线上的各种环境、以及针对这些环境构建起来的部署流水线。
636 0
DevOps实践-设计-部署流水线设计
|
机器学习/深度学习 编解码 C++
Google Earth Engine——世界人口数据集包含了自上而下的按年龄和性别组的估计人口细分。2020年单个国家的年龄/性别结构估计数据集,空间分辨率为100米。
Google Earth Engine——世界人口数据集包含了自上而下的按年龄和性别组的估计人口细分。2020年单个国家的年龄/性别结构估计数据集,空间分辨率为100米。
598 0
Google Earth Engine——世界人口数据集包含了自上而下的按年龄和性别组的估计人口细分。2020年单个国家的年龄/性别结构估计数据集,空间分辨率为100米。
|
SQL 安全 数据库
sqli笔记-基于错误的SQL注入与WAF绕过
正文 测试的是登陆功能,此功能会向数据库发送查询的请求,这里我们仔细来看一下,获取我的数据并通过 POST 请求发送。 工具使用的是Burp Suite,这里拦截了请求并将其发送到repeater:
476 0
sqli笔记-基于错误的SQL注入与WAF绕过