のディープコピーを作成するための最良の解決策を見つけようとしていますHashMap
。このマップには を実装するオブジェクトはありませんCloneable
。シリアライゼーションとデシリアライゼーションよりも優れた解決策を見つけたいと思います。
質問する
44183 次
3 に答える
13
Deep Cloningを見てください。Google Code でライブラリを見つけることができます。https://github.com/kostaskougios/cloningで読むことができます。
仕組みは簡単です。これは任意のオブジェクトを複製でき、オブジェクトはシリアライズ可能などのインターフェイスを実装する必要はありません。
Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);
// clone is a deep-clone of o
ただし、注意してください: これにより、何千ものオブジェクトが複製される可能性があります (複製されたオブジェクトに多数の参照がある場合)。また、ファイルまたはストリームをコピーすると、JVM がクラッシュする可能性があります。
ただし、ストリームなどのクラスの特定のインスタンスは無視できます。このライブラリとそのソースを確認する価値があります。
于 2012-10-24T12:38:09.887 に答える
3
一般的な方法では実装できないと思います。
- 単純にクローンを実装する機会があれば、私はそのようにします。
- もう少し複雑なのは、各オブジェクトのクラスに基づいてある種のクローン実装クラスを検索するタイプ マップの作成です。
- オブジェクトが有向非巡回グラフを形成する可能性がある場合、私は通常、これまでに見たすべてのオブジェクトのオリジナルからクローンへのマップを保持し、既に作成しているかどうかを確認します
- 一般的なグラフがある場合、問題は非常に厄介になります。オブジェクトの作成順序に奇妙な制約があるかもしれません。最終フィールドがある場合は不可能かもしれません。
今のところ、一般的ではない方法で質問を書き直すことを提案します
于 2012-10-24T12:34:58.727 に答える