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

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

相关推荐
秋饼31 分钟前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
福兮说2 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json
紧跟先前的步伐3 小时前
Go AI Agent 实战 03|Token、上下文窗口与模型调用成本
java·人工智能·golang
const_qiu4 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
Promising_GEO4 小时前
GEE实战02期:从卫星波段开始:利用 Sentinel-2 自己计算 NDVI
java·sentinel·遥感·空间分析
大文说跨境4 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化
CoderYanger4 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
顽疲5 小时前
java springboot vue 养老系统源码详解:请假 care_leave 销假与床位停费日扣实践
java·vue.js·spring boot
XIAEE5 小时前
一个即时通讯项目是怎么长出来的:(Spring Boot 3 + Vue 3 微前端 + 悟空 IM + LiveKit)
java·spring