Findbugs的bug? “定义compareTo()并使用Object.equals()”

问题描述 投票:0回答:1

我得到以下Findbugs错误,类似于here概述的错误:

此类定义compareTo(...)方法,但从java.lang.Object继承其equals()方法。

对于我班级内的这种方法:

Public class MyClass {

    public int getCost() { ... }

  @Override
    public final int compareTo(MyClass other) {
      return Integer.compare(this.getCost(), other.getCost());
    }
}

而且我认为这不太正确 - 使用Integer.compare,根据API:

如果x == y,则值为0;如果x <y,则小于0的值;如果x> y,则值大于0

因此,为了避免错误,我尝试手动编写,并得到了同样的错误:

public class MyClass {

  public int getCost() { ... }

  public final int compareTo(Myclass other) {
      if (this.finalCost < other.getFinalCost()) {
        return 1;
      } else if (this.getCost() > other.getCost() ) {
        return -1;
      } else {
        return 0;
      }
  }

现在,我甚至根本没有定义或使用equals()方法。这是一个FindBugs错误吗?

另外,我读过的很多建议都是为了实现你自己的equals方法(我得到的),还有你自己的哈希...我不明白为什么。任何详细说明将不胜感激。

findbugs compareto
1个回答
0
投票

compareTo的实现在此类中被重写,但equals的实现继承自Object类,因此使用不同的逻辑。这可能会导致compareTo()返回0,但equals()返回false;

© www.soinside.com 2019 - 2024. All rights reserved.