【问题标题】:using compareTo method when overriding compareTo?覆盖 compareTo 时使用 compareTo 方法?
【发布时间】:2017-02-02 12:09:30
【问题描述】:

当实现 Comparable 接口并重写 compareTo 方法时,

@Override
public int compareTo(Name o) {
    int val = this.name.compareTo(o.name);
    if (val != 0) {
        return val;
    }        
    if (count != o.count) {
        return count - o.count;
    }
}

第三行,我意识到我可以在覆盖它的时候使用 compareTo,它会按照自然顺序自动比较事物。但是 compareTo 不是可比较接口中的抽象方法。不定义它,它仍然比较?还有,为什么我不需要使用 super 关键字来区分这个 compareTo。

【问题讨论】:

    标签: java interface compareto


    【解决方案1】:

    您正在实现class Name extends Comparable<Name> 中的方法compareTo。这个类有一个叫name的成员。如果你在第三行调用Name.compareTo,你会因为无限递归而崩溃,也不能调用Comparable.compareTo,这确实是抽象的。

    您正在调用X.compareTo,其中X 是您声明成员变量name 的类型。

    换句话说,这只有在name 不是instanceof Name 时才有效。

    顺便说一句,您需要在最后一个 if 块中添加一个带有 return 语句的 else 分支,否则这个 sn-p 将无法编译。

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多