5

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

LinkedList 操作のほとんどがジェネリック パラメーター タイプ E を受け取り、いくつかはパラメーターとして「オブジェクト」を受け取ることに気付きました。たとえば、

add(E e) 
remove(Object o) 

そうする具体的な理由はありますか?「削除」をジェネリック型 E にしないのはなぜですか (型の消去後は問題にならないことはわかっていますが、疑問に思っています)。

4

3 に答える 3

1

これは、削除equals()操作がメソッドを使用して等価性をチェックし、equals()メソッドがジェネリックではなくオブジェクトをパラメーターとして受け取るためです。

于 2012-07-24T05:23:30.927 に答える
0

呼び出し元は任意のタイプのオブジェクトを呼び出しremoveたりcontains使用したりでき、コードは問題なく実行されるためです。コレクションの型パラメーターが使用するコンパイル時の契約は、コレクション内のすべてが指定された型になることを保証します* 。異なるタイプのオブジェクトが含まれているかどうかを尋ねるかどうかは気にしません。

*ニトピッカーのコーナー、Javaジェネリックが実際には保証されないことは知っています。シンタックスシュガーのほうが多いと思います。

于 2012-07-24T05:05:22.273 に答える
0

add メソッドと remove メソッドはどちらも Collection インターフェイスから継承されます。remove メソッドは、おそらく問題にならないため、一般的な引数で後付けされませんでした。削除はコレクションの型の安全性に影響を与えません。地球上で最も人気のある API の 1 つを変更する場合は、変更が少ない方がよいでしょう。contains メソッドも同じ運命をたどったことがわかります。

于 2012-07-24T05:10:22.990 に答える