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超类型限定的通配符可以向泛型对象中进行写入
相关文章
|
11天前
|
JavaScript Java 编译器
Java包装类和泛型的知识点详解
Java包装类和泛型的知识点的深度理解
|
1月前
|
Java
java中的泛型类型擦除
java中的泛型类型擦除
13 2
|
12天前
|
Java 调度
Java中常见锁的分类及概念分析
Java中常见锁的分类及概念分析
15 0
|
12天前
|
Java
Java中ReentrantLock中tryLock()方法加锁分析
Java中ReentrantLock中tryLock()方法加锁分析
12 0
|
29天前
|
人工智能 监控 算法
java智慧城管源码 AI视频智能分析 可直接上项目
Java智慧城管源码实现AI视频智能分析,适用于直接部署项目。系统运用互联网、大数据、云计算和AI提升城市管理水平,采用“一级监督、二级指挥、四级联动”模式。功能涵盖AI智能检测(如占道广告、垃圾处理等)、执法办案、视频分析、统计分析及队伍管理等多个模块,利用深度学习优化城市管理自动化和智能化,提供决策支持。
206 4
java智慧城管源码 AI视频智能分析 可直接上项目
|
10天前
|
存储 监控 安全
泛型魔法:解码Java中的类型参数
泛型魔法:解码Java中的类型参数
33 0
泛型魔法:解码Java中的类型参数
|
12天前
|
Java
Java中关于ConditionObject的signal()方法的分析
Java中关于ConditionObject的signal()方法的分析
21 4
|
12天前
|
Java
Java中关于ConditionObject的分析
Java中关于ConditionObject的分析
17 3
|
12天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
16天前
|
设计模式 缓存 安全
分析设计模式对Java应用性能的影响,并提供优化策略
【4月更文挑战第7天】本文分析了7种常见设计模式对Java应用性能的影响及优化策略:单例模式可采用双重检查锁定、枚举实现或对象池优化;工厂方法和抽象工厂模式可通过对象池和缓存减少对象创建开销;建造者模式应减少构建步骤,简化复杂对象;原型模式优化克隆方法或使用序列化提高复制效率;适配器模式尽量减少使用,或合并多个适配器;观察者模式限制观察者数量并使用异步通知。设计模式需根据应用场景谨慎选用,兼顾代码质量和性能。

热门文章

最新文章