java通配符如何使用
通配符的基本概念
Java中的通配符(Wildcard)主要用于泛型中,表示为?,用来表示未知类型。通配符可以提高代码的灵活性,尤其是在处理泛型集合时。
通配符的分类
Java通配符分为三种:无界通配符、上界通配符和下界通配符。

无界通配符
无界通配符使用<?>表示,可以接受任何类型的参数。通常用于方法参数中,表示不关心具体的类型。
public void printList(List<?> list) {
for (Object elem : list) {
System.out.println(elem);
}
}
上界通配符
上界通配符使用<? extends T>表示,表示类型必须是T或其子类。适用于需要读取数据的场景。

public double sumOfList(List<? extends Number> list) {
double sum = 0.0;
for (Number num : list) {
sum += num.doubleValue();
}
return sum;
}
下界通配符
下界通配符使用<? super T>表示,表示类型必须是T或其父类。适用于需要写入数据的场景。
public void addNumbers(List<? super Integer> list) {
for (int i = 1; i <= 10; i++) {
list.add(i);
}
}
通配符的使用场景
- 无界通配符:适用于不需要关心具体类型的场景,如打印集合内容。
- 上界通配符:适用于需要从集合中读取数据的场景,确保类型安全。
- 下界通配符:适用于需要向集合中写入数据的场景,确保类型安全。
通配符的注意事项
- 通配符不能用于创建泛型类的实例,如
List<?> list = new ArrayList<?>();是错误的。 - 通配符通常用于方法参数或返回值类型,提高代码的灵活性。
- 使用通配符时需注意类型安全,避免在运行时出现类型转换异常。
示例代码
以下是一个综合示例,展示三种通配符的用法:
import java.util.ArrayList;
import java.util.List;
public class WildcardExample {
// 无界通配符
public static void printList(List<?> list) {
for (Object elem : list) {
System.out.print(elem + " ");
}
System.out.println();
}
// 上界通配符
public static double sum(List<? extends Number> list) {
double sum = 0.0;
for (Number num : list) {
sum += num.doubleValue();
}
return sum;
}
// 下界通配符
public static void addIntegers(List<? super Integer> list) {
for (int i = 1; i <= 5; i++) {
list.add(i);
}
}
public static void main(String[] args) {
List<Integer> intList = new ArrayList<>();
addIntegers(intList);
printList(intList);
System.out.println("Sum: " + sum(intList));
}
}






