私は ASF の寄稿者によって書かれた記事を読んでいました。彼は、オブジェクトをディープ クローンするための "古い Java トリック" は、オブジェクトをシリアライズしてからデシリアライズして別のオブジェクトに戻すことであると簡単に述べました。これを読んだとき、私は一時停止し、「これはかなり賢い」と思いました。残念ながら、ディープ クローニングもシリアル化もこの記事の主題ではなかったため、著者は自分が話していることの例を示したことはありません。
私は、次のようなものについて話していると仮定する必要があります。
public class Dog implements Serializable
{
// ...
public Dog deepClone()
{
Dog dogClone = null;
try
{
FileOutputStream fout = new FileOutputStream("mydog.dat");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(this);
oos.close();
FileInputStream fin = new FileInputStream("mydog.dat");
ObjectInputStream ois = new ObjectInputStream(fin);
dogClone = (Dog)ois.readObject();
ois.close();
return dogClone;
}
catch(Exception e)
{
// Blah
}
}
私が少しずれている可能性がある場合 (プラスまたはマイナスの数行のコード)、これはオブジェクトのディープ クローンを作成するための一般的に受け入れられている方法ですか? この方法に落とし穴や注意点はありますか?
対処されていない同期/並行性/スレッドセーフの問題はありますか?
これがオブジェクトのディープ クローン作成のベスト プラクティスである場合、私はそれを宗教的に使用するつもりです。