9

CollectionJava ライブラリで、インターフェースが拡張されずインターフェースCloneableされない理由は何Serializableですか?

4

2 に答える 2

25

Collectionelementsと呼ばれるオブジェクトのグループを指定するインターフェイスです。要素のグループを維持する方法の詳細は、 の具体的な実装に任されていCollectionます。たとえば、一部のCollection実装でListは要素の重複を許可しますが、他の実装では許可Setしません。多くのCollection実装には publiccloneメソッドがあります。ただし、 のすべての実装にこれを含めることはあまり意味がありませんCollectionCollectionは抽象表現だからです。重要なのは実装です。実際実装; つまり、具体的な実装では、クローンまたはシリアル化する方法、またはクローンまたはシリアル化できるかどうかを決定する必要があります。場合によっては、実際のバッキング実装が何であるかによって、クローン作成とシリアライゼーションがあまり意味をなさないことがあります。したがって、すべての実装でクローン作成とシリアル化を義務付けることは、実際には柔軟性が低く、より制限的です。特定の実装では、複製またはシリアル化できるかどうかを決定する必要があります。

Oracleのドキュメントからの説明は次のとおりです。

多くの Collection 実装 (JDK によって提供されるすべてのものを含む) には public clone メソッドがありますが、すべての Collection でそれを要求するのは間違いです。たとえば、テラバイトの SQL データベースに支えられたコレクションのクローンを作成するとはどういう意味でしょうか? メソッド呼び出しにより、会社は新しいディスク ファームを要求する必要がありますか? シリアライズ可能についても同様の議論が成り立ちます。

クライアントがコレクションの実際のタイプを知らない場合、必要なコレクションのタイプをクライアントに決定させ、このタイプの空のコレクションを作成し、addAll メソッドを使用してコレクションをコピーする方が、はるかに柔軟でエラーが発生しにくくなります。元のコレクションの要素を新しいコレクションに。

于 2012-05-05T17:06:57.187 に答える
8

もしそうなら、それはすべてのCollection実装がCloneableandSerializableである必要があり、必要以上に制限されているからです. 実装ではこれらのインターフェイスも実装されることがよくありますが、Collectionインターフェイスがそれを必要とするわけではありません。

于 2012-05-05T17:06:17.957 に答える