Java通配符?提升泛型灵活性,分无界(?)、上界(? extends T)和下界(? super T);遵循PECS原则:生产用extends,消费用super,避免同时读写。

Java中的通配符主要用于泛型方法的参数中,用来增强代码的灵活性和可重用性。通配符用?表示,可以配合extends和super关键字使用,分别限定上界和下界。
通配符的基本形式
通配符有三种常见形式:
- ?(无界通配符):表示可以接受任意类型的泛型对象。
- ? extends T(上界通配符):表示接受T类型或其子类型。
- ? super T(下界通配符):表示接受T类型或其父类型。
无界通配符的使用场景
当你只关心集合的操作而不涉及具体元素类型时,可以使用?。例如,打印一个列表的所有元素:
for (Object elem : list) {
System.out.println(elem);
}
}
这里不能向list中添加除null以外的任何元素,因为类型未知,但可以安全地读取元素并当作Object处理。
立即学习“Java免费学习笔记(深入)”;
上界通配符:? extends T
适用于需要从泛型结构中“读取”数据的场景。例如,计算一个数字列表的总和:
public double sum(java.util.List extends Number> numbers) {double total = 0.0;
for (Number num : numbers) {
total += num.doubleValue();
}
return total;
}
这个方法可以接收List、List等,只要它们是Number的子类。但不能往里面添加Integer或Double,因为实际类型不确定。
基于ECSHOP2.7.2制作,模板使用的是早期的凡客模板。整站大气,清爽。适合综合,鞋子,服饰类商城使用。具体安装方法在程序包中有说明,在使用之前请看下。 大体方法:1.上传程序至网站根目录,访问:域名/diguo (用户名:admin 密码:123456)2.设置好数据库信息,然后恢复数据,数据目录在www.shopex5.com下.3.修改data目录下的config数据库配置文件。4.登陆
下界通配符:? super T
适用于需要向泛型结构中“写入”数据的场景。例如,将一组整数添加到一个可以容纳Integer及其父类型的列表中:
for (int i = 1; i list.add(i);
}
}
这个方法可以接收List、List、List等。你可以安全地添加Integer对象,但从中读取的元素只能当作Object使用。
PECS原则(Producer-Extends, Consumer-Super)
这是使用通配符的重要指导原则:
- 如果一个参数化类型只是用来产出T实例(即从集合中读取),使用
? extends T。 - 如果只是用来消费T实例(即向集合中写入),使用
? super T。 - 如果既读又写,通常不使用通配符。
例如,Java集合框架中的Collections.copy()方法就遵循这一原则:
从src读取(生产者 → extends),向dest写入(消费者 → super)。
基本上就这些。通配符让泛型更灵活,但也要注意“不能同时读写”的限制,合理使用才能写出安全又通用的代码。










