Javaのequals()を実装するときの基本形は
public boolean equals(Object o) {
if (o == null) return false;
if (o instanceof Foo) {
// 中身を見て比較
}
return false;
}
という風に習って、ずっとそれでいいと思ってたけど
本当はサブクラスとの比較はサブクラスにやらせるべきだろう。
public boolean equals(Object o) {
if (o == null) return false;
if (o.getClass() == Foo.class) {
// 中身を見て比較
}
// 特殊なケースをここで判断
if (o instanceof Foo) {
return o.equals(this);
}
return false;
}
とすべきなんじゃないかと思う。