Collections.reverseOrder如何在返回Comparator <T>时知道要使用的类型参数

Jag*_*gat 5 java

根据Java API规范,Collections.reverseOrder的签名为

public static <T> Comparator<T> reverseOrder()

方法说明中给出的示例说它需要用作

Arrays.sort(a, Collections.reverseOrder());

当我们调用该方法时,我们在任何地方都没有指定使用哪种类型(T解析为哪种类型)。

在这种情况下,编译器如何解析T?是否可以根据分配给它的对象的类型来解析返回类型(T)?

顺便说一句,我知道重载的reverseOrder(Comparator<T> c)方法。

Rei*_*ica 5

Arrays.sort()知道它需要哪种比较器,因为它T是由第一个参数(a)指定的:

public static <T> void sort(T[] a, Comparator<? super T> c)
Run Code Online (Sandbox Code Playgroud)

编辑:

@Louis Wasserman正确地指出,我们只需要一个Comparator<? super T>,而不是一个Comparator<T>。因为Object是any的超类T,所以Comparator<Object>(如果未提供通用参数,则为默认值)就足够了。