为什么我需要可比较的接口而不是用java创建自定义方法

为什么我需要可比较的接口而不是用java创建自定义方法,java,interface,Java,Interface,Comparable是一个可以实现到类中的接口,我不理解的是为什么我需要实现该接口才能在类中使用数组。sort。我可以调用数组。sort,而无需将接口Comparable实现到我的类中 此外,接口提供了一个空方法,以便我可以指定自己的操作。我读过关于comparable的其他答案,他们都说原因是为了让我的编码更容易。与相比,只是一个我必须定义的空代码,这有什么帮助呢?我可以定义我自己的代码,并为它命名我想要的任何东西 我确信这背后有一个很好的理由。然而,我不能理解它,这真的让我很不安,有人能用“

Comparable
是一个可以实现到类中的接口,我不理解的是为什么我需要实现该接口才能在类中使用
数组。sort
。我可以调用
数组。sort
,而无需将接口
Comparable
实现到我的类中

此外,接口提供了一个空方法,以便我可以指定自己的操作。我读过关于comparable的其他答案,他们都说原因是为了让我的编码更容易。与相比,只是一个我必须定义的空代码,这有什么帮助呢?我可以定义我自己的代码,并为它命名我想要的任何东西


我确信这背后有一个很好的理由。然而,我不能理解它,这真的让我很不安,有人能用“不是代码示例”的例子向我解释它吗。请用一个非常简单的英语,为什么它很重要,如何节省我的时间。感谢您,在Javadoc中预先指定了
公共静态无效排序(Object[]a)
方法,所有对象都必须实现
compariable
接口。这是在实现中假设的,您可以在其中找到下一行

Comparable pivot = (Comparable) a[start];
如果您的元素没有实现comparable,那么将产生运行时异常


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

尽管您有
数组。sort((T[]a,Comparator以这些数字为例:4、7、2、7、42、3、4、9和5

假设我要求你对它们进行排序。你会怎么做?你会按升序、降序或其他方法对它们进行排序

那个么答案是,你们不知道如何分类,因为我并没有给你们提供足够的信息

Arrays.sort
处于类似的未知位置。你想让它为你排序,但简单地说,
Arrays.sort
不知道如何排序。你必须向
Arrays.sort
解释你希望数组如何排序。你向
Arrays.sort
解释这一点的方式是实现
比较ble
接口


至于这种设计是如何为您节省时间的。好吧,它以一种微妙的方式做到了这一点:如果您实现了
Comparable
,那么您就可以自动使用任何方法(想想算法)它知道如何使用
Comparable
。这同样适用于实现其他接口。

我可以调用Arrays.sort,而不必将Comparable接口实现到我的类中:不,你不能。这样做,你就会看到。sort()将如何实现方法比较数组中的元素,如果您不告诉它如何进行比较的话?这就是Comparable的作用。就像我要求您对书籍进行排序一样。您如何知道mst是按高度、作者、标题还是页数对它们进行排序的?您需要实现接口的原因是因为数组。sort必须知道使用哪种方法必须调用以执行比较,该方法是接口中定义的方法。仍然不清楚,接口只是我签署的合同,但是,声明的方法是空的,所以它怎么能做任何事情。我是在类中实现该方法后定义该方法的人,我的意思是我可以调用它任何东西如果我愿意,那么空方法究竟可以做什么或决定什么。这就是我真正感到困惑的地方。
Arrays.sort
依赖
compareTo
方法进行排序。但是通常不需要类来实现
compareTo
方法。因此,
Arrays.sort
只接受对象实现Compariable的om类。由于实现接口需要实现其所有方法,因此sort函数现在可以确定您传递的对象将有一个
compareTo
方法,并且可以安全地调用它。@salimALmughairi在这个意义上的声明意味着:定义名称和参数(也称为签名).Defining意味着编写方法体(也称为implementing)。
Array.sort
不调用接口的方法(这是不可能的,因为接口无法实例化)但是你在实现方法体时编写的代码。但是名称和签名与接口声明的完全一样:这是你签署的合同。谢谢,但是,你的回答对我来说并不完整,我仍然很难理解另一个类中的函数如何强制另一个类中的函数理解这两门课之间的关系没有明确的解释。但是这比任何其他的答案都要清楚,如果你愿意的话,它给了我一个好的开始。无论如何,谢谢。也许我不应该用“理解”这个词。让我们以汽车的方向盘为例。在所有的汽车中,方向盘都提供相同的功能接口:它允许驾驶员驾驶汽车。然而,方向盘有多种实现方式:无动力转向(传统)动力转向和电动动力转向。更进一步地说,对驾驶员来说,实现并不重要。重要的是,界面和方向盘的使用方式是一样的。
Arrays.sort
需要某种行为,但不关心如何实现。