3

重複の可能性:
Java コレクションの remove メソッドが一般的でないのはなぜですか?

JavaCollection<E>インターフェイスにはcontains、次のシグネチャを持つメソッドがあります。

boolean contains(Object o)

インターフェースはタイプのジェネリックでEあるため、署名はすべきではありません
boolean contains(E o)

それを反映し、 type の引数のみを許可しますE

remove(Object o)メソッドに関して同じ質問をすることができます

4

1 に答える 1

4

containsandメソッドは、のremoveインスタンスではない可能性のあるオブジェクトを受け入れる(そして成功する可能性がある)ため、任意のオブジェクトを受け入れますE。の契約containsは次のとおりです。

このコレクションに(o == null?e == null:o.equals(e))のような要素eが少なくとも1つ含まれている場合にのみ、trueを返します。

o実際にコレクション内のオブジェクトである必要はないことに注意してください。単にequalsテストに合格する必要があります。

同じ考えが。にも当てはまりremoveます。

このスレッドも参照してください。ここでは、作成containsremoveジェネリックによって、既存の完全に有効なコードの多くが壊れていることが指摘されています。

于 2012-10-25T00:05:54.077 に答える