Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

書籍 Effective Java | equalsをオーバーライドする時は一般契約に従う

パンくず

Effective Java
equalsをオーバーライドする時は一般契約に従う

概要

equalsをオーバーライドする時は一般契約に従う

equalsメソッドをオーバーライドするケース

論理的等価性を求められるケース。
例えば、Personクラスのname,birthdayが同じなら同一人物と判断したい場合には
equalsメソッドをオーバーライドしてname,birthdayで判断するロジックにします。

equalsメソッドをオーバーライドする場合の一般契約

契約 詳細
反射的 nullではないxに対して、x.equals(x)が成立する
対照的 nullではないx,yに対して、y.equals(x)が成立す場合のみx.equals(y)が成立する
推移的 nullではないx,y,zに対して、x.equals(y),y.equals(z)が成立するならx.equals(z)が成立する
整合的 nullではないxに対して、x.equals(x)は何度呼びだされても一貫した値を返すこと
null nullではないxに対して、x.equals(null)はfalseを返す