Java的List集合中泛型使用详解

 更新时间:2023年12月18日 10:00:45   作者:暴躁的程序猿啊  
这篇文章主要介绍了Java的List集合中泛型使用详解,泛型类,如果没有指定具体的数据类型,此时,操作类型是Object,泛型的类型参数只能是类类型,不能是基本数据类型,需要的朋友可以参考下

list泛型类型

我们来看一段代码

 public void test(){
        Object o=null;
        String str1=null;
        //多态表现   父类的引用接收子类的对象
        o=str1;
    }

但是下面这样的代码是不能赋值的

 public void test(){
        List<Object> list1=null;
        List<String> list2=null;
        //此时list1和list2不具有子父类关系
        list1=list2;
    }

在这里插入图片描述

在这里插入图片描述

我们可以看到 需要的是Object 传的是一个String 这种情况我们使用时候是需要注意的 但是有一种情况是可以的

 //但是这种情况是可以的  泛型相同 多态的表现
        List<String> list3=null;
        ArrayList<String> list4=null;
        list3=list4;
        //相当于 这样
        List<String> list5=new ArrayList<String>();

这样是可以的相当于 多态的表现

List泛型使用通配符 ?

我们使用?通配符的时候 这样赋值可以

  public void List1() {
        List<String> list1 = new ArrayList<>();
        List<?> list=new ArrayList<>();
        list1.add("111");
        //这样赋值是可以的
        list=list1;
    }

但是我们使用add、get方法时

  public void List1() {
        List<String> list1 = new ArrayList<>();
        List<?> list=new ArrayList<>();
        list1.add("111");
        //这样赋值是可以的
        list=list1;
        //对于List<?>就不能向其内部添加数据
        //但是不可以添加数据  除了添加  null
        list.add("1");
        //可以读取数据
        list.get(0);
    }

可以看到是有错误的 不能添加数据

在这里插入图片描述

但是有一个特例 添加null是可以添加的

 public void List1() {
        List<String> list1 = new ArrayList<>();
        List<?> list=new ArrayList<>();
        list1.add("111");
        //这样赋值是可以的
        list=list1;
        //对于List<?>就不能向其内部添加数据
        //但是不可以添加数据  除了添加  null
        list.add("1");
        //null可以
        list.add(null);
        //可以读取数据
        list.get(0);
    }

在这里插入图片描述

List泛型使用

有限制条件的通配符的使用 ? extents Person ? super Person

创建两个类演示

/**
 * @create: 2021/10/2
 * @author: Tony Stark
 */
public class Person {
}
/**
 * @create: 2021/10/2
 * @author: Tony Stark
 */
public class Student extends Person {
}

我们创建集合使用泛型赋值测试

   public void Extent() {
        //必须赋值小于等于的类型
        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;
    }

可以看到报错了

在这里插入图片描述

这里就要介绍一下范围的要求

  • ? extents Person 必须赋值小于等于person的类型
  • ? super Person 必须赋值大于等于person的类型

很明显我们上面list5是object类型大于了我们的list1要求小于等于persion 同理 list3是student不满足list2大于等于person的要求

到此这篇关于Java的List集合中泛型使用详解的文章就介绍到这了,更多相关List集合泛型详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java动态代理之拦截器的应用

    Java动态代理之拦截器的应用

    今天小编就为大家分享一篇关于Java动态代理之拦截器的应用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Spring Cloud Hystrix 服务降级限流策略详解

    Spring Cloud Hystrix 服务降级限流策略详解

    这篇文章主要为大家介绍了Spring Cloud Hystrix 服务降级限流策略详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 关于Hystrix的监控及可视化面板

    关于Hystrix的监控及可视化面板

    这篇文章主要介绍了关于Hystrix的监控及可视化面板,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • redis与ssm整合方法(mybatis二级缓存)

    redis与ssm整合方法(mybatis二级缓存)

    本文给大家介绍redis与ssm整合方法(mybatis二级缓存)。主要是利用redis去做mybatis的二级缓存,mybaits映射文件中所有的select都会刷新已有缓存,如果不存在就会新建缓存,所有的insert,update操作都会更新缓存
    2017-12-12
  • springboot动态调整日志级别的操作大全

    springboot动态调整日志级别的操作大全

    这篇文章主要介绍了springboot动态调整日志级别的方法,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Java实现Excel与HTML互转

    Java实现Excel与HTML互转

    Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看具体实现方法吧
    2025-01-01
  • Java锁升级机制超详细讲解(附实例代码)

    Java锁升级机制超详细讲解(附实例代码)

    Java中的synchronized锁会经历一个从无锁到偏向锁,再到轻量级锁,最后到重量级锁的升级过程,这种优化称为锁升级或锁膨胀,这篇文章主要介绍了Java锁升级机制超详细讲解的相关资料,需要的朋友可以参考下
    2025-06-06
  • JAVA编程实现随机生成指定长度的密码功能【大小写和数字组合】

    JAVA编程实现随机生成指定长度的密码功能【大小写和数字组合】

    这篇文章主要介绍了JAVA编程实现随机生成指定长度的密码功能,可生成带有大小写和数字组合的随机字符串,需要的朋友可以参考下
    2017-07-07
  • Java 数据结构与算法系列精讲之汉诺塔

    Java 数据结构与算法系列精讲之汉诺塔

    汉诺塔是源于印度一个古老传说的益智玩具。大梵天创造世界时做了三根石柱,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,三根柱子之间一次只能移动一个圆盘
    2022-02-02
  • 使用SpringBoot发送邮箱验证码的简单实现

    使用SpringBoot发送邮箱验证码的简单实现

    这篇文章主要介绍了使用SpringBoot发送邮箱验证码的简单实现,咱们今天来讲使用QQ邮箱来发送和接收验证码,首先来介绍一下它在SpringBoot项目中的具体应用,需要的朋友可以参考下
    2023-04-04

最新评论