java类型通配符(?)允许编写代码时对类型不敏感。它在泛型集合和通配方法中用途广泛:在泛型集合中,可创建保存不同类型元素的集合,例如:list<?> list = new arraylist<>()。在通配方法中,可创建对类型不敏感的方法,例如:public static <t> void printlist(list<? extends t> list)。

Java 类型通配符的用途
类型通配符是在 Java 中一种通用的类型参数,它允许我们编写代码时对类型不敏感。这在泛型集合和通配方法中特别有用。
语法
类型通配符使用 ? 符号表示。它可以限制在它被使用的类型参数。语法如下:
extends Type> super Type>
-
? extends Type:匹配Type类型的子类型或本身。 -
? super Type:匹配Type类型的超类型或本身。
用途
1. 在泛型集合中
类型通配符可用于创建可以保存不同类型元素的泛型集合。例如:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
List> list = new ArrayList();
list.add("Hello");
list.add(10); // 编译器不会报错
由于列表的类型参数 (?) 未指定,因此我们可以添加任何类型的数据。
2. 在通配方法中
类型通配符可用于创建对类型不敏感的通配方法。例如:
public static <t> void printList(List extends T> list) {
for (T item : list) {
System.out.println(item);
}
}</t>
此方法可以打印任何类型的列表,因为类型参数 T 由通配符 ? extends T 进行了限制。
实战案例:
假设我们有一个包含各种形状的列表 shapes:
List<shape> shapes = new ArrayList(); shapes.add(new Circle()); shapes.add(new Square());</shape>
现在,我们可以使用类型通配符创建一个方法来计算这些形状的总面积:
public static double calculateTotalArea(List extends Shape> shapes) {
double totalArea = 0;
for (Shape shape : shapes) {
totalArea += shape.getArea();
}
return totalArea;
}
这个方法可以计算任何类型形状的总面积,因为它只访问 Shape 类中定义的方法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










