重写equals方法时如何指定两个对象?

时间:2017-01-22 23:52:10

标签: java android override equals

我正在执行一项任务,要求我覆盖住宅类的equals方法。

说明如下:

  

当他们的建筑面积相等且他们的游泳池状态相同时,两栋房屋是相同的

到目前为止,这是我写的:

@Override
public boolean equals(Object other) {
   if (other instanceof House) {
         House otherHouse = (House) other;
         return otherHouse.calcBuildingArea() == ???   
             && otherHouse.mPool == ???
   } else {
         return false;
   }
}

现在我不知道在==标志后写什么。我不知道如何指定调用该方法的对象。

2 个答案:

答案 0 :(得分:1)

如果在未指定对象的情况下调用方法,则将在当前对象上调用该方法。所以你可以写

return otherHouse.calcBuildingArea() == calcBuildingArea()
         && otherHouse.mPool == mPool;

或者如果你想让它变得清晰明确,你可以写

return otherHouse.calcBuildingArea() == this.calcBuildingArea()
         && otherHouse.mPool == this.mPool;

另请注意,这假设mPool属于基本类型或enum类型。如果它是引用类型,例如String,您可能需要调用其equals方法,例如

return otherHouse.calcBuildingArea() == calcBuildingArea()
         && otherHouse.mPool.equals(mPool);

甚至更无效的

return otherHouse.calcBuildingArea() == calcBuildingArea()
         && Objects.equals(otherHouse.mPool, mPool);

答案 1 :(得分:0)

这个怎么样?

return otherHouse.calcBuildingArea() == this.calcBuildingArea()   
         && otherHouse.mPool == this.mPool