パンくず
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を返す |