下面是实现Comparator
接口的类。
public class Descending implements Comparator {
@Override
public int compare(Object o1, Object o2) {
if( o1 instanceof Comparable && o2 instanceof Comparable) {
Comparable c1 = (Comparable) o1;
Comparable c2 = (Comparable) o2;
return c1.compareTo(c2);
}
return -1;
}
}
正如您所看到的,将比较两个整数值并对其进行排序。我想知道的是,在compare override方法中,它使用Comparable
接口将两个值作为c2.compareTo(c1)
进行比较。我认为Comparable
也是接口,所以必须有compareTo
方法的详细实现来比较两个整数。然而,当我进入compareTo
方法时,它只是Comparable
接口的内部。我试图根据这个假设来寻找compareTo
的实现位置(Comparable
方法中的compareTo
应该在某个地方被覆盖以执行c2.compareTo(c1)
(,但没有找到它,我认为没有地方定义它的覆盖方法。我的假设是错误的吗?
Object o1
&Object o2
实现了compareTo
方法。
以Instant
类为例。该类的Javadoc显示implements Comparable<Instant>
。这意味着这个类的作者承诺实现接口Comparable
的方法。该接口上唯一的方法是compareTo
。
因此,我们向下滚动Instant
Javadoc的页面,找到一个方法compareTo
,该方法接受类型为Instant
的参数。
如果你从OpenJDK项目中查看该类的开源实现,你会发现java.time.Instant#compareTo
方法的源代码。