Java中的泛型通配符详解!extends和super的使用分析

简介: 本篇文章详细介绍了Java中的泛型通配符类型。分别说明了类型的上界extends和类型的下界super,分析了extends和super的基本使用方式以及使用注意点。最后介绍了在使用通配符中需要遵循的PECS原则。

? 通配符类型

  • ? extends T表示类型的上界:

    • 表示参数化类型的可以是T或者T的子类
  • ? super T表示类型的下界:

    • 表示参数化类型是这个类型的超类型,即父类型,直至Object

? extends T

  • 上界? extends T只能往外取,不能往里存
  • 通配符 ? 和类型参数 T 的区别:

    • 对于编译器来说,所有的T都代表同一种类型
    • 通配符?没有这样的约束,只表示放置了一个类型,具体是什么类型不能确定
  • ? extends T的作用:

    • 在List中不能使用add方法
    • 可以在初始化时,指定不同的类型
    • 这样就能读取出不同类型的数据

? super T

  • ? super T可以往里存数据,往外取数据只能放在Object对象中
  • ? super T只能添加T类型和T类型的子类,不能添加T类型的父类,读取出来的东西只能存放在Object类里

    • 下界规定了元素的最小粒度的下限,放宽了容器元素的类型控制
    • 因为元素是T的基类,所以往里存比T 小的都可以
    • 出于类型安全的考虑,可以往里加入T类的对象或者T类的任何子类的对象
  • 由于编译器并不知道集合的内容源自T的哪一个超类,所以不允许加入特定的任何超类对象
  • 在读取时,编译器不知道是什么类型的情况下,只能返回Object对象

    • 因为Object是任何Java类的最终父类
    • 这时,元素的类型信息全部丢失

PECS原则

  • PECS原则: Producer Extends Consumer Super

    • 频繁往外读取内容的,适合使用上界Extends
    • 经常往里插入内容的,适合使用下界Super

总结

  • extends可以用于返回类型限定
  • super可以用于参数类型限定,不能用于返回类型限定
  • ? 既不能用于方法参数传入,也不能用于方法返回

  • 带有extends子类型限定的通配符可以向泛型对象进行读取
  • 带有super超类型限定的通配符可以向泛型对象中进行写入
相关文章
|
1月前
|
存储 Java
【编程基础知识】 分析学生成绩:用Java二维数组存储与输出
本文介绍如何使用Java二维数组存储和处理多个学生的各科成绩,包括成绩的输入、存储及格式化输出,适合初学者实践Java基础知识。
71 1
|
19天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
36 2
|
20天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
13 2
|
24天前
|
Java API
[Java]泛型
本文详细介绍了Java泛型的相关概念和使用方法,包括类型判断、继承泛型类或实现泛型接口、泛型通配符、泛型方法、泛型上下边界、静态方法中使用泛型等内容。作者通过多个示例和测试代码,深入浅出地解释了泛型的原理和应用场景,帮助读者更好地理解和掌握Java泛型的使用技巧。文章还探讨了一些常见的疑惑和误区,如泛型擦除和基本数据类型数组的使用限制。最后,作者强调了泛型在实际开发中的重要性和应用价值。
19 0
[Java]泛型
|
1月前
|
存储 安全 Java
🌱Java零基础 - 泛型详解
【10月更文挑战第7天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
11 1
|
1月前
|
Java
让星星⭐月亮告诉你,Java synchronized(*.class) synchronized 方法 synchronized(this)分析
本文通过Java代码示例,介绍了`synchronized`关键字在类和实例方法上的使用。总结了三种情况:1) 类级别的锁,多个实例对象在同一时刻只能有一个获取锁;2) 实例方法级别的锁,多个实例对象可以同时执行;3) 同一实例对象的多个线程,同一时刻只能有一个线程执行同步方法。
18 1
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
41 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
1月前
|
Java 语音技术 容器
java数据结构泛型
java数据结构泛型
27 5
|
1月前
|
存储 Java 编译器
Java集合定义其泛型
Java集合定义其泛型
18 1
|
1月前
|
Java
如何从Java字节码角度分析问题|8月更文挑战
如何从Java字节码角度分析问题|8月更文挑战