Java 通配符

一、为什么需要通配符?

泛型让代码更安全、更灵活,但在某些情况下,类型参数不能确定(比如方法参数既要接收 List 又要接收 List),这时就需要 通配符(Wildcard)。


二、三种常见通配符

1. 无界通配符 <?>

表示"任意类型"。

java 复制代码
public void printList(List<?> list) {
    for (Object obj : list) {
        System.out.println(obj);
    }
}

✅ 可以读取元素

❌ 不能添加(除了 null)

2. 上界通配符 <? extends T>

表示「类型是 T 或 T 的子类」,常用于 只读场景。

java 复制代码
public double sum(List<? extends Number> list) {
    double total = 0;
    for (Number n : list) total += n.doubleValue();
    return total;
}

✅ 可以安全读取为 T 类型

❌ 不能往里放(除了 null)

3. 下界通配符 <? super T>

表示「类型是 T 或 T 的父类」,常用于 写入场景。

java 复制代码
public void addIntegers(List<? super Integer> list) {
    list.add(1);
    list.add(2);
}

✅ 可以安全写入 T 或其子类

❌ 读取只能得到 Object


三、小结

通配符 典型用法
<?> 只读(打印、遍历)
<? extends T> 上界:只读 T
<? super T> 下界:安全写入

📖 口诀:PECS 原则

  • Producer Extends → 生产者用 extends
  • Consumer Super → 消费者用 super
相关推荐
斑马13916 分钟前
Linux软件编程学习笔记(十二)——TCP并发服务器模型
java·服务器·网络
冬栈程序设计20 分钟前
Springboot宿舍管理系统【670099】 -附源码(开箱即用)
java·毕业设计·springboot·课程设计·程序设计·大作业
2601_9622845028 分钟前
北京Java全栈开发培训 Web前端开发 软件测试就业培训班
java·软件测试·web前端·全栈开发·就业培训
qiaosaifei1 小时前
JAVA老项目中有大量的类名_编译时报找不到符号错误
java·开发语言
聪明蛋子哟1 小时前
MCP协议深度落地:如何用Python/Java双语言实现统一的工具调用网关?
java·开发语言·python
文子越来越强1 小时前
【双因子认证】拦截注解@MFACheck 接入指南(其他微服务如何用)
java
ZGG0031 小时前
线程池详解:从 7 大参数到生产避坑
java·数据库·后端
迪康Defender2 小时前
公用电脑责任追溯难?迪康端点安全一体化管理系统用户模式详解
java·运维·开发语言·网络·其他·安全
京师20万禁军教头2 小时前
47-常用类-八大包装类(Wrapper Classes)
java
come112342 小时前
剪映零基础教程
java·linux·运维