我刚刚发现了java.util.Arrays
中的以下sort
重载:
public static void sort(Object[] a)
public static <T> void sort(T[] a, Comparator<? super T> c)
为什么第一个重载不是通用的,而第二个重载是通用的?为什么第一个重载使用
Object[]
而不是 Comparable[]
?文档甚至指出:
那么,不通过 Java 的静态类型系统验证这个约束有什么意义呢?数组中的所有元素都必须实现
Comparable
接口。
Comparable[]
,对吗? - fredoverflowTreeSet
有相同的“怪异性”:您实际上可以使用未实现Comparable
接口的类创建TreeSet
,但在运行时会出现ClassCastException
。然而,数组是另一个问题,因为在运行时,A[]
与B[]
不同于泛型集合。 - fgeTreeSet
接受没有实现Comparable
接口的元素,如果你提供了一个Comparator
,那是为了兼容性的原因。 - Marco Forberg