2012-07-24 10 views
5

可能性の重複:
Why aren't Java Collections remove methods generic?JavaのコレクションのLinkedList関数の引数の型

私は、LinkedListの操作の数がわずかテイク「オブジェクト」ながら、ジェネリックパラメータの型Eを取ることに気づきましたパラメータ。たとえば、

add(E e) 
remove(Object o) 

具体的な理由はありますか?どうして "remove"をジェネリックタイプEにしてみませんか?(タイプ消去後は問題ありませんが、不思議です)

答えて

0

addメソッドとremoveメソッドはCollectionインターフェイスから継承されます。おそらくそれは問題ではないので、removeメソッドは一般的な引数で後で修正されませんでした。 Removeはコレクションの型の安全性には影響しません。また、地球上で最も人気のあるAPIの1つを変更しているときは、変更が少なくなります。 containsメソッドが同じ運命に苦しんでいることがわかります。

+0

"問題ではないので"それは問題です。異なるタイプのオブジェクトは等しいことができます。 – newacct

+0

異なる型のオブジェクトをパラメータ化されたコレクションに追加することは決してできないため、removeメソッドをパラメータ化することで何も得られないため、問題はありません。 –

+0

私はコレクションに追加されたものについて何も言わなかった。 'remove()'メソッドの定義では、渡されたものと等しいものを削除する必要があります – newacct

0

呼び出し元はremoveまたはcontainsを任意のタイプのオブジェクトを使用して呼び出すことができ、コードは引き続き正常に動作します。コレクションの型パラメータが使用するコンパイル時の規約は、のいずれかのコレクションが指定された型のものであることを保証します。異なるタイプのオブジェクトが含まれているかどうか尋ねるかどうかは気にしません。

* Nitpicker's Corner、Java genericsは実際には保証されていないことを知っています。私が考えている構文的な砂糖の多く。

1

平等のための除去動作確認がequals()メソッドを使用してequals()方法は、パラメータジェネリックないよう、オブジェクトにかかるためです。

関連する問題