为什么使用Java中的可比接口?

Why use the comparable interface in Java?

我想问一下为什么要用java中的可比接口?不使用可比较的接口只做compareTo方法不是更简单吗?

而不是这样做:

//some class that implements comparable

public int compareTo(someClass someInstanceOfThatClass) {
    // do stuff that returns -1,0,or 1 
}

为什么我们不能这样做:

//some class that does NOT implement comparable, but we still 
//make a compareTo method 

public int compareTo(someClass someInstanceOfThatClass) {
    // do stuff that returns -1,0, or 1
}

我想我的问题是,如果我们可以创建一个 compareTo 方法而不被某些接口强制执行(可比较),为什么我们还要费心去实现可比较?

Comparable 是一个接口,因此它强加了一个其他人可以遵循的契约。例如,仅当元素是 Comparable 的实例时调用 Collections.sort(list) 才有效,并且内部依赖于 compareTo 方法来实现排序。

Java的类型系统是nominal, not structural,所以仅仅有接口需要的方法是不够的;您还必须声明 class 实现了接口。在其他一些语言中,例如 Typescript,具有正确签名的方法就足够了,但 Java 不是那样的。

如果您只是从自己的代码中调用 compareTo 方法,那么这可能无关紧要,但如果您使用的是 classes 或标准库或其他库中的方法Comparable 事物作为参数,那么你的 class 将需要实现接口以便你可以将你的对象传递给它们。

我认为它returns 到界面的先天概念。 您始终确保每个实现了 Comparable 接口的 class 都具有比较能力,有时您需要这种保证。 例如,如果您有一个方法具有 Comparable 类型的参数,那么您可以确定 comapreTo 是使用该参数实现的,并且该参数在语义上是可比较的。 但是没有界面你就得不到这种保证。