Javaでインスタンスの深いクローン/コピーを行う推奨方法があるかどうか疑問に思っています。
私は3つの解決策を考えていますが、いくつかは見逃す可能性があります。あなたの意見を聞きたいと思います
編集:Bohzoの提案を含め、質問を洗練させます。これは、浅い複製よりも深い複製についてです。
自分でやれ:
プロパティの後に手動でクローンプロパティをコーディングし、可変インスタンスもクローンされることを確認します。
pro:
-
実行される内容の制御-迅速な実行
短所:
-作成および保守が面倒
-バグが発生しやすい(コピー/貼り付けの失敗、プロパティの欠落、変更可能なプロパティの再割り当て)
リフレクションを使用する:
独自のリフレクションツールまたは外部ヘルパー(jakarta common-beansなど)を使用すると、1行で処理を行う汎用のコピーメソッドを簡単に作成できます。
pro:
-書き込みが簡単
-メンテナンスの
短所:
-何が起きるかの制御が少ない
-リフレクションツールがサブオブジェクトも複製しない場合、ミュータブルオブジェクトでバグが発生しやすい
-実行が遅い
クローンフレームワークを使用する:
:のように、あなたのためにそれを行うフレームワークを使用してください
コモンズ・ラングSerializationUtils
Javaの深クローニングライブラリ
ドーザ
Kryo
プロ:
-リフレクションと同じ
-正確に複製されるものをより詳細に制御します。
短所:
-階層の最後でも、すべての可変インスタンスが完全に複製されます
-実行が非常に遅くなる可能性があります
実行時にバイトコードインストルメンテーションを使用してクローンを書き込む
javassit、BCEL、またはcglibを使用すると、片手で書いたように高速で専用のクローンを生成できます。誰かがこの目的のためにこれらのツールの1つを使用しているlibを知っていますか?
ここで見逃したものは何ですか?
どちらをお勧めしますか?
ありがとう。