複製する必要のあるオブジェクトがあります。ただし、クローンを作成するときに、その中のオブジェクトもクローンする必要があります。これはどのように可能ですか?
6 に答える
これは明確に定義された問題ではなく、機械化された完全自動の方法でディープコピーを適切に実行できないことに注意する必要があります。これらはいくつかのオプションです:
- Javaには
clone
プロトコルがありますが、最近のほとんどのシナリオでは非推奨と見なされています。 - シリアル化を使用して、メモリ内をシリアル化-逆シリアル化できます。
- いわゆるコピーコンストラクターを書くことができます。
Javaディープクローンライブラリクローンライブラリは、オブジェクトをディープクローンする小さなオープンソースのJavaライブラリです。オブジェクトは、Cloneableインターフェースを実装する必要はありません。事実上、このライブラリは任意のJavaオブジェクトのクローンを作成できます。
Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);
だからここにクローンの例があります。
clone()
メソッド自体をオーバーライドする必要があります
public class Person implements Cloneable{
private Long id;
private Address address
@Override
protected Object clone() throws CloneNotSupportedException {
//do deep cloning
}
}
も参照してください
ディープコピーを実装する最も簡単な方法は、オブジェクトをシリアル化してから逆シリアル化することです。見上げるObjectInputStream
とObjectOutputStream
。
ディープクローン作成の最も簡単な方法は、を使用するJava serialization
ことです。ここで、ユーザーserialize
とdeserialize
オブジェクトを使用して、逆シリアル化されたバージョンを返します。
クローンを作成する別の方法は、提供されたインスタンスのデータに基づいて新しいインスタンスを構築するためのコピーコンストラクターを提供することです。
public MyClass(MyClass instanceToCopy)
{
...
}