面试题答案
一键面试? extends Number
通配符的作用:? extends Number
表示该通配符匹配Number
类及其所有子类。- 在
void processList(List<? extends Number> list)
方法中,意味着该方法可以接受任何元素类型是Number
子类的List
,比如List<Integer>
、List<Double>
等。 - 但是,由于具体类型的不确定性,不能向
List<? extends Number>
中添加除了null
以外的任何元素。因为编译器无法确定具体的类型,只知道是Number
的某个子类,添加Integer
可能不适合Double
类型的列表,反之亦然。
- 设计既能添加
Integer
类型元素,又能添加Double
类型元素的方法:- 方法签名及参数类型可以设计如下:
void addElements(List<Number> list, Number num) {
list.add(num);
}
在这个方法中,参数类型为List<Number>
,这样的列表可以添加Integer
和Double
(因为Integer
和Double
都是Number
的子类)。addElements
方法接受一个List<Number>
类型的列表和一个Number
类型的元素,然后将这个元素添加到列表中。例如:
List<Number> numberList = new ArrayList<>();
addElements(numberList, 10); // 添加Integer类型
addElements(numberList, 10.5); // 添加Double类型