2

箱から出してディープコピーすることは可能ですか?つまり、関数を手動でObjectコーディングする以外の方法です。clone

4

3 に答える 3

5
  1. クローン作成は、必ずしもディープコピーを実行するわけではありません。実際、のデフォルトの実装は浅いコピーをObject.clone()作成します。

  2. オブジェクトのクロージャーがSerializableまたはを実装するオブジェクトで構成されている場合は、およびを使用してディープコピーを作成Externalizableできます...ただし、コストがかかります。ObjectOutputStreamObjectInputStream

  3. ライブラリは別のcloningオプションですが、コードを最初に読んだのは、引数のないコンストラクターを提供するグラフ内のすべてのオブジェクトのクラスに依存しているということです。次に、結果のオブジェクトにパッチを適用して、元のオブジェクトの状態のコピーを作成します。このプロセスは、引数なしのコンストラクターが実際に行うことによっては、望ましくない副作用をもたらす可能性があります。

要するに、私は普遍的な解決策があるとは思いません。

于 2012-10-20T07:38:42.240 に答える
0

java.lang.reflectを使用することをお勧めします。

java.lang.Classはすべてのフィールドを公開し、パブリックフィールドの読み取りとパブリックメソッドの呼び出しを可能にします。

アクセサのないプライベートフィールドのみを複製することはできません。

于 2012-10-20T07:55:10.243 に答える
0

cloningライブラリコードを簡単に見てみました。これは、シリアル化が行うこと、つまりオブジェクトの内部のグラフを取得することを実行し、ファイルに書き込む代わりに、オブジェクトのクローンであるメモリ位置=に書き込みます。したがって、シリアル化よりも高速ですが、確かに同じことを行います。

于 2012-10-20T07:58:12.610 に答える