MST
星途 面试题库

面试题:Java泛型中上限通配符的使用场景及示例

请解释Java泛型中上限通配符(? extends)的作用,并举例说明在哪些场景下会使用到它。例如,在一个处理数字类型的方法中如何运用上限通配符实现对不同数字类型(如Integer、Double等)的统一处理。
47.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

上限通配符(? extends)的作用

上限通配符 ? extends 用于声明一个类型通配符,表示该通配符代表的类型是某个特定类型的子类型(包括该特定类型本身)。它使得代码能够处理多种相关类型的数据,同时保持类型安全性。主要作用有:

  1. 灵活处理子类型:允许方法接受特定类型及其所有子类型作为参数,提高代码的通用性。
  2. 类型安全:编译器会确保在使用通配符类型时不会引入类型错误。

使用场景举例

  1. 处理数字类型的方法:在处理数字类型(如 IntegerDoubleNumber 的子类型)时,可使用上限通配符实现统一处理。

示例代码如下:

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 子类型(如 IntegerDouble)的列表。通过这种方式,实现了对不同数字类型列表的统一处理。