当前位置: 首页 > 面试题库 >

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

堵景天
2023-03-14
问题内容

根据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)

编辑:

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



 类似资料:
  • Android Kotlin,<代码>api。openOrder返回类型为BaseResponse 我想要的代码是,如果配置文件。值不为null,API返回BaseResponse 但android studio提示,这种有趣的返回类型是任何,如何修复? 排除if-else用法,因为配置文件。值具有许多属性,并且具有配置文件。价值用户名,

  • 我试图创建一个返回泛型类型参数的方法。 我有一个类车辆订单扩展抽象类订单。在类订单中,我创建了一个抽象方法接收HiredObject。这个方法不会接收任何参数,并将返回一个泛型。 我在VehicleOrder类中实现了这个方法,并将其设置为返回类参数vehicle。 问题是,当我实例化一个新的VeilceOrderorororororororororororororderororororororo

  • 我正在使用泛型在python中创建一个List类(类似于java列表的列表)。类节点也是通用的,我正在为上一个和下一个节点创建 getter 和 setters 方法。我想知道如何返回像类节点本身这样的类型?这是我的进步: 我试过 但它给了我错误

  • Android片段的onresume/onpause方法与主机活动的生命周期紧密耦合,如图所示。 我想知道的是如何检测碎片从/返回到应用程序的导航流内部。 示例: 假设我有主要活动和片段A、B和C。 编辑: 澄清:我想知道从片段B(类似于活动与onPause和onResume的工作方式)

  • 在试图理解与c 17兼容的代码时,我被下面的代码搞糊涂了,其中函数在尾部返回类型中使用integral_constant类型参数的值。(请随时更正我的术语等,尝试学习) 下面展示了两个简单的版本,在尾部返回中的参数上有decltype和没有decltype。 使用编译器资源管理器https://godbolt.org/z/vqmzhu 第一个(bool_from1)在 MSVC 15.8上编译ok

  • 这是简化的代码 那么如何在类型注释中使用名称Myclass呢?我的TypeScript版本是3.2.2