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());
}
}
泛型的作用
- 代码复用:通过使用泛型
<T>
,该方法可以处理不同类型的 Number
子类(如 Integer
、Double
等),而不需要为每种类型编写重复的排序方法。
- 类型安全:泛型确保在编译时进行类型检查,避免运行时的类型转换异常。例如,如果传递给方法的
List
中包含非 Number
子类的元素,编译器会报错。
泛型边界的作用
- 限制类型:
T extends Number & Comparable<T>
中的 extends Number
表示 T
必须是 Number
类或其子类,这确保了方法只能处理数值类型。
- 支持比较:
& Comparable<T>
表示 T
类型必须实现 Comparable
接口,因为 sorted
方法需要元素具备可比较性,这样才能进行排序。如果没有这个边界限制,编译器会因为不知道 T
类型如何比较而报错。