Javaでdeep copyを簡単に実現できるCloningライブラリ
2012年7月24日
Javaでディープコピー(deepcopy)を実装するのは面倒くさい。
基本的にはSerializableインタフェースを実装して、適切にcloneメソッドをオーバーライドしていくのが必要。
フィールドにオブジェクト型があればそれもSerializableが必要と芋づるしきに面倒臭くなっていく。
ディープコピーが必要となったクラスが結構な規模になっていたので、Serializableでいまさらの実装は厳しく、
なにか良いライブラリがないかと探していたらcloningというライブラリが見つかった。
deepcopy関連で検索するとすぐ見つかると思うけど、Serializableインタフェース実装の必要もなくお手軽だ。
ライブラリのClonerというインスタンスを作成してdeepCloneメソッドの引数に対象のオブジェクトを入れるだけでdeepCopyが実現する。
deepCloneメソッドの前に特定クラスをdeepCopyしないようにしたりNULLに設定したりもできるようだ。
なにもしなければ当然全フィールドがdeepCloneの対象となる。
[使用例]
Cloner cloner = new Cloner();
cloner.deepClone(Object);
Cloningライブラリは下記サイトからダウンロードできる。
(現在の最新バージョンは1.8.1)