问题描述
根据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时使用的类型参数< T>的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!