java 泛型中的 ?

在 Java 泛型中,? 被称为通配符(wildcard),它代表了未知的类型。使用通配符可以增加代码的灵活性,允许在不知道具体类型的情况下操作泛型类或接口。通配符主要有以下几种形式:

  1. 无界通配符(Unbounded Wildcard):

    • 使用形式为 ?,表示它可以是任何类型。
    • 例如:List<?> list 表示这个列表可以包含任意类型的元素,但是我们不能向这样的列表添加元素(除了 null),因为我们不知道列表实际存储的是哪种类型的数据。
  2. 上界通配符(Upper Bounded Wildcard):

    • 使用形式为 ? extends T,这里的 T 表示某个特定类型,extends 关键字表明通配符所代表的未知类型是 T 类型或其子类型。
    • 例如:List<? extends Number> 可以接受 List<Number>, List<Integer>, List<Double> 等类型的列表,但不能向这些列表中添加对象,因为编译器无法确定添加的对象是否符合列表的实际类型要求。
  3. 下界通配符(Lower Bounded Wildcard):

    • 使用形式为 ? super T,这里的 T 表示某个特定类型,super 关键字表明通配符所代表的未知类型是 T 类型或其父类型。
    • 例如:List<? super Integer> 可以接受 List<Integer>, List<Number>, List<Object> 等类型的列表。在这种情况下,我们可以向列表中添加 Integer 类型的元素,因为这些列表都保证能接受 Integer 类型的数据。

使用通配符可以使泛型更加通用和灵活,但同时也要注意保持类型安全。在处理泛型时,选择合适的通配符可以避免不必要的类型转换错误,并且提高代码的可读性和安全性。

相关推荐
日月云棠10 小时前
各版本JDK对比:JDK 25 特性详解
java
用户83071968408211 小时前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide12 小时前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家12 小时前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺12 小时前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户9083246027312 小时前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端
桦说编程13 小时前
实战分析 ConcurrentHashMap.computeIfAbsent 的锁冲突问题
java·后端·性能优化
程序员清风17 小时前
用了三年AI,我总结出高效使用AI的3个习惯!
java·后端·面试
beata18 小时前
Java基础-13: Java反射机制详解:原理、使用与实战示例
java·后端
用户03321266636718 小时前
Java 使用 Spire.Presentation 在 PowerPoint 中添加或删除表格行与列
java