【问题标题】:Function definition needs clarification [duplicate]功能定义需要澄清[重复]
【发布时间】:2014-02-27 16:20:20
【问题描述】:

在我们教授的代码中,他这样定义他的冒泡排序函数(和其他排序函数):

public static <T extends Comparable<T>> void bubbleSort(T[] array) {
              \_______________________/
                         |
          This is the part I don't understand.

他已经定义了访问修饰符、返回类型(或缺少它)、函数名和所需的参数。它甚至不返回可以进行比较的对象,所以我觉得这有点令人困惑。将不胜感激。

【问题讨论】:

标签: java


【解决方案1】:

[函数] 甚至不返回可以进行比较的对象

签名的定义方式是将排序后的值放回原始数组中。方法的返回类型为void;你强调的部分是这样说的

  • 该方法有一个名为T 的泛型类型参数,并且
  • 可以使用实现Comparable&lt;T&gt;的任何类型的数组调用此方法

换句话说,您可以使用Strings、Integers、Doubles 以及您自己的任何实现Comparable&lt;T&gt; 接口的类的数组来调用相同的方法。

就比较而言,该函数指定数组的元素需要相互比较,因为它们实现了Comparable&lt;T&gt;。此时,您的排序函数应该拥有您需要的一切——即要排序的项目数组,以及一种将两个项目相互比较的方法。这两个条件足以实现任何基于比较的排序算法。

【讨论】:

    【解决方案2】:

    这个定义说这个方法可以需要T类型的对象数组(请看T的第二个用法),这个T需要定义为实现Comparable接口。

    在这个特定的情况下,要求实现这个接口的参数的目的是这个方法应该只关注特定排序算法的实现,而不需要处理排序的细节,同时它允许对任何类型进行排序对象(实现 Comparable 接口)。

    有关泛型类型和方法的更多信息,请参阅 http://docs.oracle.com/javase/tutorial/java/generics/index.html 和 Comparable 接口 http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 2011-12-28
      • 2012-07-05
      • 2011-08-23
      • 2015-04-17
      • 1970-01-01
      • 2013-09-06
      • 2022-01-04
      • 2011-11-09
      相关资源
      最近更新 更多