1

一段时间以来,我一直在尝试学习可比较的类,我知道正确的语法以及在大多数情况下如何使用它。如:

int result = ObjectA.compareTo(ObjectB); 

如果两个对象相同,则返回值 0;如果对象 A 小于对象 B 则为负值,如果 A 大于 B 则为正值。

但是,当我实际编写一个使用 compareTo 方法的程序时,编译器说它找不到 compareTo 方法。

我的问题是:我必须直接从 Comparable 类继承才能使用 compareTo 方法吗?我问的唯一原因是因为您不必显式继承 toString 或 equals 之类的方法......因为一切都从对象继承。CompareTo 属于哪里?

4

5 回答 5

6

您需要实现Comparable接口:

public class MyClass implements Comparable<MyClass>

然后声明compareTo()方法:

public int compareTo(MyClass myClass){
    //compare and return result
} 
于 2013-03-14T22:21:18.163 回答
1

Comparable是一个接口,而不是一个类。所以你将实现接口,而不是子类。此外,实现接口意味着compareTo自己在实现类中实现方法。

于 2013-03-14T22:21:29.997 回答
0
  1. 首先,它只在实例中起作用。由于您的命名,不知道您的比较是比较对象还是类本身。我会假设你正在使用对象:)
  2. 你想比较的类#compareTo必须实现Comparable。无需实现即可实现此目的的另一种方法Comparable是为您的排序方法提供Comparator期望您的类。
于 2013-03-14T22:22:03.170 回答
0

Comparable是一个接口,所以你不要“继承”它(extends),而是实现它(implements)。

您可以在类中编写自己的compareTo方法而无需指定Comparable接口,但是 API 中的方法将不知道您的对象是否符合Comparable强制执行的合同。因此,您将无法使用Arrays.sort()期望与确实执行的对象一起使用的方法Comparable

于 2013-03-14T22:22:53.940 回答
0

如果您想A比较类的对象,可能是因为您喜欢对这些对象的列表进行排序,则需要使类A实现Comparable接口。

一旦类A实现Comparable,它必须实现并定义 的行为compareTo,这本质上就是希望如何比较类的两个对象A

在这个方法中,您可以决定类的哪些字段A参与评估对象的较小较大

于 2013-03-14T22:25:15.573 回答