下面是实现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;
}
}如您所见,将比较两个整数值并将其排序。我想知道的是,在比较重写方法中,它使用Comparable接口将两个值作为c2.compareTo(c1)进行比较。我认为Comparable也是接口,因此必须详细实现比较两个整数的compareTo方法。但是,当我进入compareTo方法时,它只是Comparable接口的内部。我试图基于这样的假设寻找compareTo实现的位置( Comparable方法中的compareTo应该在某个地方被覆盖以执行c2.compareTo(c1)),但是没有搜索它,而且我认为没有地方可以定义它的重写方法。我的假设是假的吗?
发布于 2021-12-15 18:19:11
Object o1 & Object o2的具体类实现了compareTo方法。
以Instant类为例。该类的Javadoc说implements Comparable<Instant>。这意味着该类的作者承诺实现该接口Comparable的方法。该接口上的唯一方法是compareTo。
因此,我们向下滚动Instant Javadoc页面,以找到接受Instant类型参数的方法compareTo。
如果您查看OpenJDK项目中该类的开源实现,就会发现方法。
https://stackoverflow.com/questions/70368052
复制相似问题