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

时间:2017-04-13 14:19:26

标签: findbugs compareto

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

  

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

我班上的这个方法:

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 <1,则小于0的值。 Ÿ;和一个价值   如果x> 0,则大于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方法(我得到的),还有你自己的哈希...我不明白为什么。任何详细说明将不胜感激。

1 个答案:

答案 0 :(得分:0)

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