2

多くの人は を使いinstanceofたがりませんが、多くの場合、equalsメソッドに関して他に選択肢がほとんどないことがわかりました。以下のクラスを見てください。

class A {   
    int n;
    public A(int n) { this.n = n; }

    @Override
    public boolean equals(Object o) {
        return false;
    }

    public boolean equals(A o) {
        return n == o.n;
    }   
}

私はこのようなことを見たことがありませんが、 anが an であるかどうかinstanceofをテストするために使用しなければならない代わりとして役立つでしょうか? それとも、私が考えていない他の問題がありますか?ObjectA

4

3 に答える 3

8

Object が A かどうかをテストするために instanceof を使用する代わりに使用できますか?

いいえ。これは、呼び出されるメソッドが静的に選択されるためです。つまりequals(object o)、ほとんどの状況でのみ呼び出されます。

あなたは書ける

@Override
public boolean equals(Object o) {
    return o instanceof A && n == ((A) o).n;
}
于 2012-11-21T16:02:42.283 に答える
0

このコード ブロックは、equals をオーバーライドするのではなくオーバーロードしています。また、o == null をチェックすることも忘れないでください。instanceof の代わりに getClass().equals(other.getClass()) を含め、A.isAssignableFrom(other.getClass()) を使用する

于 2012-11-21T16:05:29.687 に答える
0

使用するコレクション、Swing コンポーネント、およびその他のクラスは引き続きバージョンをequals呼び出し、常に戻ります。equals(Object o)false

この例は、メソッドを明示的に呼び出す場合にequals(A o)のみ機能します。

于 2012-11-21T16:04:49.230 に答える