5

ArrayListJavaで、オブジェクトの(または任意のコレクション)をラップするクラスがあるとします。

呼び出し元がArrayListで行われたオブジェクトへの将来の変更を確認できないように、これらのオブジェクトの1つをどのように返しますか?

つまり、オブジェクトのディープコピーを返したいが、それがクローン可能かどうかはわかりません。

4

3 に答える 3

4

それを仕様に変えてください: -その
オブジェクトは、コレクションに許可されるためにインターフェースを実装する必要があります。ArrayList<ICloneable>()

そうすれば、常にディープコピーを実行することが保証されます。インターフェイスには、ディープコピーを返すことが保証されているメソッドが必要です。

それがあなたにできる最善のことだと思います。

于 2008-08-27T09:52:49.997 に答える
2

1つのオプションは、シリアル化を使用することです。これを説明するブログ投稿は次のとおりです。

http://weblogs.java.net/blog/emcmanus/archive/2007/04/cloning_java_ob.html

于 2008-08-27T09:52:10.343 に答える
1

私はそれが明白な答えだと思います:

コレクションに保存されているクラスがクローン可能であるための要件を作成します。挿入時または取得時に、より意味のあることを確認して、例外をスローすることができます。

または、アイテムがクローン可能でない場合は、参照によるリターンオプションにフェールバックします。

于 2008-08-27T09:53:26.843 に答える