1. ホーム
  2. java

ディープクローンユーティリティのすすめ【終了

2023-08-26 19:30:45

質問

java コレクションのディープクローニングのためのユーティリティはありますか。

  • 配列
  • リスト
  • 地図

注:シリアライズを使用せず、Object.clone()メソッドを使用したソリューションを希望しています。私のカスタムオブジェクトがclone()メソッドを実装し、クローン可能なJava標準のクラスのみを使用することを確認できます。

どのように解決するのですか?

私は前の緑の答えが悪かったと思う なぜでしょうか?

  • 多くのコードが追加される
  • コピーするすべてのフィールドをリストアップし、これを実行する必要があります。
  • これは、clone()を使用する場合、Listでは動作しません。 (これはHashMapのclone()が言っていることです。このHashMapインスタンスの浅いコピーを返します: キーと値自体はコピーされません)。

あ、ちなみにシリアライズもダメで、Serializableを付けまくらないといけないかもしれません(これも泣ける)。

で、解決策はというと。

Javaディープクローニングライブラリ クローニングライブラリ は、オブジェクトのディープクローニングを行う小さなオープンソース (apache license) の Java ライブラリです。オブジェクトは Cloneable インターフェースを実装する必要はありません。事実上、このライブラリはあらゆるJavaオブジェクトのクローンを作成することができます。例えば、キャッシュされたオブジェクトを変更されたくない場合や、 オブジェクトのディープコピーを作成したい場合に使用できます。

Cloner cloner=new Cloner();
XX clone = cloner.deepClone(someObjectOfTypeXX);

でチェックしてみてください。 https://github.com/kostaskougios/cloning