akasaka_34の日記

ネトウヨと呼ばれた男の日記。しかし頻度から言えば週報ぐらい。

Egal nicht egal

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;
    }

とすべきなんじゃないかと思う。