为什么我需要可比的接口而不是在Java中创建自定义方法

时间:2018-10-05 11:38:51

标签: java interface

Comparable是可以在类中实现的接口,我不明白的是为什么我需要实现该接口才能在类中使用Arrays.sort。我可以调用Arrays.sort,而不必在类中实现接口Comparable

此外,接口始终提供一个空方法,以便我可以指定自己的操作。我已经阅读了有关可比性的其他答案,他们都说,这样做的原因是为了简化我的编码。 compareTo只是我必须定义的一个空代码,这又有多么容易,那么无论如何,我可以定义自己的代码并将其命名为所需的代码,这有什么帮助呢?

我很确定背后有充分的理由。但是,我无法理解它,这确实使我感到不安,有人可以用示例“非代码示例”向我解释它。请用一种非常简单的英语,为什么很重要以及如何节省我的时间。谢谢,提前

3 个答案:

答案 0 :(得分:0)

Javadoc中指定的public static void sort(Object[] a)方法,所有对象必须实现Comparable接口。在实现中假定了这一点,您可以在其中找到下一行。

Comparable pivot = (Comparable) a[start];

如果您的元素未实现可比性,则会产生运行时异常。

其他sort方法要么用于本质上可比较的类型(例如原始类型),要么要求您提供Comparator

答案 1 :(得分:0)

尽管您有Arrays.sort((T[] a, Comparator<? super T> c))方法可以接受显式Comparator,但您不想定义内联Comparator或创建特殊的Comparator类来保留代码紧凑且可读。

休息是您的选择。您可以同时选择两个选项,选择适合自己的选项。

答案 2 :(得分:0)

以这些数字为例:4、7、2、7、42、3、4、9和5。

说我请您对它们进行排序。你会怎么做?您是按升序,降序还是使用其他方法对它们进行排序?

那么答案是,由于我没有为您提供足够的信息,您将不知道如何对它们进行排序。

Arrays.sort处于类似的未知状态。您想让它为您排序,但是简单地说,Arrays.sort不知道如何对其进行排序。您必须向Arrays.sort解释如何对数组进行排序。您向Arrays.sort进行解释的方式是实现Comparable接口。

关于这种设计如何节省您的时间。好吧,它是以一种微妙的方式做到这一点的:如果实现Comparable,那么您将自动使用任何知道如何使用Comparable的方法(认为算法)。实施其他接口也是如此。