本文介绍了Collections.reverseOrder如何知道在返回Comparator时使用的类型参数< T>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

As per Java API spec, the signature of Collections.reverseOrder is

public static< T>比较< T> reverseOrder()

方法描述中给出的示例表明它需要用作

And the example given in the method description says it needs to be used as

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

当我们打电话给方法,我们无处指定要使用的类型(T解析为什么)。

When we call the method, nowhere do we specify what type to use (what T resolves to).

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

How does the compiler resolve T in this case? Can the return type (T) be resolved based on the type of the object it is being assigned to?

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

Btw, I'm aware of the overloaded reverseOrder(Comparator<T> c) method.

推荐答案

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

Arrays.sort() knows what kind of Comparator it needs, since T is specified by the first argument (a):

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

编辑:

@Louis Wasserman正确地指出我们只需要一个比较器<?超级T> ,而不是比较器< T> 。由于 Object 是任何 T 的超类,因此 Comparator< Object> (默认情况下,如果没有给出通用参数)就足够了。

@Louis Wasserman correctly points out that we only need a Comparator<? super T>, not a Comparator<T>. Since Object is a superclass of any T, then Comparator<Object> (the default if no generic parameters are given) is sufficient.

这篇关于Collections.reverseOrder如何知道在返回Comparator时使用的类型参数&lt; T&gt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 11:37