面试题答案
一键面试上限通配符(? extends)的作用
上限通配符 ? extends
用于声明一个类型通配符,表示该通配符代表的类型是某个特定类型的子类型(包括该特定类型本身)。它使得代码能够处理多种相关类型的数据,同时保持类型安全性。主要作用有:
- 灵活处理子类型:允许方法接受特定类型及其所有子类型作为参数,提高代码的通用性。
- 类型安全:编译器会确保在使用通配符类型时不会引入类型错误。
使用场景举例
- 处理数字类型的方法:在处理数字类型(如
Integer
、Double
等Number
的子类型)时,可使用上限通配符实现统一处理。
示例代码如下:
import java.util.List;
public class GenericUpperBoundExample {
// 定义一个方法,计算列表中数字的总和
public static double sum(List<? extends Number> list) {
double total = 0;
for (Number number : list) {
total += number.doubleValue();
}
return total;
}
public static void main(String[] args) {
// 创建一个包含Integer的列表
java.util.ArrayList<Integer> integerList = new java.util.ArrayList<>();
integerList.add(1);
integerList.add(2);
// 创建一个包含Double的列表
java.util.ArrayList<Double> doubleList = new java.util.ArrayList<>();
doubleList.add(1.5);
doubleList.add(2.5);
// 调用sum方法处理不同数字类型的列表
double integerSum = sum(integerList);
double doubleSum = sum(doubleList);
System.out.println("Integer列表的总和: " + integerSum);
System.out.println("Double列表的总和: " + doubleSum);
}
}
在上述代码中,sum
方法接受一个 List<? extends Number>
类型的参数,这意味着它可以接受任何包含 Number
子类型(如 Integer
或 Double
)的列表。通过这种方式,实现了对不同数字类型列表的统一处理。