MST

星途 面试题库

面试题:Java 泛型与基础类集合的复杂应用

假设有一个 `List<Number>` 类型的集合,需要编写一个方法,该方法接收这个集合作为参数,并将集合中所有元素(假设元素都是 `Integer` 或 `Double`)按照它们的数值大小进行降序排序。请使用 Java 8 的 Stream API 结合泛型来实现这个功能,同时解释为什么要在这种场景下使用泛型以及泛型的边界在其中起到了什么作用。
15.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class NumberSorter {
    public static <T extends Number & Comparable<T>> List<T> sortDescending(List<T> numbers) {
        return numbers.stream()
                .sorted(Comparator.reverseOrder())
                .collect(Collectors.toList());
    }
}

泛型的作用

  1. 代码复用:通过使用泛型 <T>,该方法可以处理不同类型的 Number 子类(如 IntegerDouble 等),而不需要为每种类型编写重复的排序方法。
  2. 类型安全:泛型确保在编译时进行类型检查,避免运行时的类型转换异常。例如,如果传递给方法的 List 中包含非 Number 子类的元素,编译器会报错。

泛型边界的作用

  1. 限制类型T extends Number & Comparable<T> 中的 extends Number 表示 T 必须是 Number 类或其子类,这确保了方法只能处理数值类型。
  2. 支持比较& Comparable<T> 表示 T 类型必须实现 Comparable 接口,因为 sorted 方法需要元素具备可比较性,这样才能进行排序。如果没有这个边界限制,编译器会因为不知道 T 类型如何比较而报错。