2017-01-22 2 views
0

私はハウスクラスのequalsメソッドをオーバーライドするように指示する課題を行っています。次のようにequalsメソッドをオーバーライドするときに両方のオブジェクトを指定するにはどうすればよいですか?

命令は、次のとおりです。彼らの建物の面積が等しく、そのプールの状態は今までと同じ

で、これは私が書いたものであるとき

両院は同等です:

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

今、私は==符号の後に何を書くべきか分からない。メソッドを呼び出すオブジェクトを指定する方法がわかりません。

+1

"this"キーワードを使用すると、現在のオブジェクトを参照できます。 –

+0

あなたはその行をどのように書くか教えてもらえますか?私はこれに少し新しいです...ありがとう –

答えて

1

オブジェクトを指定せずにメソッドを呼び出すと、メソッドは現在のオブジェクトに対して呼び出されます。だから、

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

を書くことができるか、あなたはそれがいいとはっきりと明示したい場合は、これはmPoolがプリミティブ型またはenum型であることを前提としていることを

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

注意も書くことができます。それは、このようなStringとして参照型、だ場合、あなたは

このことについてどのように
return otherHouse.calcBuildingArea() == calcBuildingArea() 
     && otherHouse.mPool.equals(mPool); 

またはそれ以上のヌルフレンドリー

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

うわー;素晴らしい答え –

0

のようにそのequalsメソッドを呼び出す必要があるかもしれませんか?

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

'otherHouse'が実際に' House'であることを確認する必要があります。 – ChiefTwoPencils

+0

@ChiefTwoPencilsその特定のチェックを行うためのコードはすでに問題になっています。 OPは質問に '??? '印をつけて行に何を書くべきか知りたいだけでした。この回答は正しいです。 –

+0

@ChiefTwoPencils私はちょうど???の場所にすべきであるかについてのPshemoの特定の質問に答えるだけでした。このコードはすでに他のハウスを保証するためのifブロック内にあります。 – Shiping

関連する問題