【发布时间】:2018-10-05 11:38:51
【问题描述】:
Comparable 是一个可以实现到类中的接口,我无法理解的是为什么我需要实现该接口才能在我的类中使用Arrays.sort。我可以调用Arrays.sort,而不必在我的类中实现接口Comparable。
此外,接口提供了一个空方法,以便我可以指定自己的操作。我已经阅读了有关可比较的其他答案,他们都说原因是为了让我的编码更容易。 compareTo 只是一个我必须定义的空代码,那么这有什么帮助呢,我可以定义自己的代码并将其命名为我想要的任何名称。
我很确定这背后有充分的理由。但是,我无法理解它,这真的让我感到不安,有人可以用“不是代码示例”的例子向我解释它。请用非常简单的英语解释为什么重要以及它如何节省我的时间。谢谢,提前
【问题讨论】:
-
我可以调用 Arrays.sort 而不必实现与我的类相当的接口:不,你不能。去做吧,你会看到的。如果你不告诉它怎么做,sort() 方法将如何比较数组的元素?这就是 Comparable 的用途。就好像我让你把书分类一样。你怎么知道你是按高度、作者、标题还是页数对它们进行排序?
-
之所以需要实现一个接口是因为Arrays.Sort必须知道调用哪个方法来执行比较,那个方法就是接口中定义的那个。
-
还是不太清楚,接口只是我签的合同,但是声明的方法是空的,怎么能做任何事呢。我是在我的类中实现该方法之后定义该方法的人,我的意思是如果我愿意,我可以调用它任何东西,那么一个空方法究竟可以做什么或决定什么。这是我真正感到困惑的地方。
-
Arrays.sort依赖于compareTo方法进行排序。但是一个类通常不需要实现compareTo方法。因此,Arrays.sort只接受来自实现 Comparable 的类的对象。由于实现一个接口需要你实现它的所有方法,所以 sort 函数现在可以确定你传递的对象会有一个compareTo方法,并且可以安全地调用它。 -
@salimALmughairi Declaring 在这个意义上意味着:定义名称和参数(也称为签名)。 定义意味着编写方法体(也称为实现)。
Array.sort不调用接口的方法(这是不可能的,因为接口无法实例化),而是你在实现方法体时编写的代码。但是名称和签名与接口声明的完全一样:那是您签署的合同。