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 类型的数据。

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

相关推荐
飞滕人生TYF1 分钟前
java Arrays 详解
java·python·排序算法
xisai885 分钟前
2025年开考科目有哪些?
java·开发语言·javascript·算法·kotlin
想花7 分钟前
源码分析Spring Boot (v3.3.0)
java·spring boot·后端
陶然同学17 分钟前
RabbitMQ轻松构建高效可靠的消息队列系统
java·网络·分布式·rabbitmq·mq
李小白661 小时前
二叉树的练习题(中)
java·数据结构·算法
骑鱼过海的猫1231 小时前
【redis】redis
java·数据库·redis
漫天转悠1 小时前
Java21和Java8性能优化详细对比
java
y25082 小时前
《抽象类和接口》
java·开发语言
脸红ฅฅ*的思春期2 小时前
Java安全—log4j日志&FastJson序列化&JNDI注入
java·安全·log4j·fastjson·jndi注入
NMBG222 小时前
[JAVAEE] 网络编程
java·服务器·网络·tcp/ip·udp·java-ee