MST

星途 面试题库

面试题:Java泛型通配符的复杂应用

给定一个方法`void processList(List<? extends Number> list)`,解释这个方法参数中`? extends Number`通配符的作用。如果要实现一个既能添加`Integer`类型元素,又能添加`Double`类型元素的方法,应该如何设计方法签名及参数类型?
45.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

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

在这个方法中,参数类型为List<Number>,这样的列表可以添加IntegerDouble(因为IntegerDouble都是Number的子类)。addElements方法接受一个List<Number>类型的列表和一个Number类型的元素,然后将这个元素添加到列表中。例如:

List<Number> numberList = new ArrayList<>();
addElements(numberList, 10); // 添加Integer类型
addElements(numberList, 10.5); // 添加Double类型