根据Java API规范,Collections.reverseOrder的签名为
public static <T> Comparator<T> reverseOrder()
方法说明中给出的示例说它需要用作
Arrays.sort(a, Collections.reverseOrder());
当我们调用该方法时,我们在任何地方都没有指定使用哪种类型(T解析为哪种类型)。
在这种情况下,编译器如何解析T?是否可以根据分配给它的对象的类型来解析返回类型(T)?
顺便说一句,我知道重载的reverseOrder(Comparator<T> c)方法。
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>(如果未提供通用参数,则为默认值)就足够了。