gpt4 book ai didi

java - 为什么排序采用对象数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:48 25 4
gpt4 key购买 nike

我刚刚在 java.util.Arrays 中偶然发现了以下 sort 重载:

public static void sort(Object[] a)

public static <T> void sort(T[] a, Comparator<? super T> c)

为什么第一个重载不是通用的,而第二个是?为什么第一个重载采用 Object[] 而不是 Comparable[]?文档甚至指出:

All elements in the array must implement the Comparable interface.

那么不使用 Java 的静态类型系统验证该约束有什么意义呢?

最佳答案

如果第一种方法是通用的,它可能会更好,但它会破坏与 1.5 之前代码的兼容性:

static <T extends Comparable<T>> void sort(T[] a) {
...
}

static void main(String[] args) {
Object[] a = {"1", "2"};
sort(a); <- compile time error, need explicit cast sort((Comparable[])a);
}

虽然第二个用 1.4 代码编译,只有警告

public static <T> void sort(T[] a, Comparator<? super T> c) {
...
}

public static void main(String[] args) throws Exception {
Object[] a = { "1", "2" };
sort(a, new Comparator() { <-- warning
@Override
public int compare(Object o1, Object o2) {
return 0;
}
});
}

关于java - 为什么排序采用对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com