功能定义需要澄清

时间:2014-02-27 16:20:20

标签: java

在我们教授的代码中,他正在定义他的冒泡排序函数(和其他排序函数),如下所示:

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

他已经定义了访问修饰符,返回类型(或缺少它),函数名称和它所需的参数。它甚至没有返回一个可以进行比较的对象,所以我觉得这有点令人困惑。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

  

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

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

  • 该方法有一个名为T的通用类型参数,即
  • 可以使用实现Comparable<T>
  • 的任何类型的数组调用此方法

换句话说,您可以使用String s,Integer s,Double s以及您自己的任何实现{{1}的类的数组调用相同的方法} interface。

就比较而言,该函数指定数组的元素需要相互比较,因为它们实现了Comparable<T>。此时,您的排序功能应该包含您需要的所有内容 - 即要排序的项目数组,以及将两个项目相互比较的方法。这两个条件足以实现基于比较的任何排序算法。

答案 1 :(得分:1)

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

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

有关通用类型和方法的详情,请参阅http://docs.oracle.com/javase/tutorial/java/generics/index.html和可比较界面http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html