Java で clone() を実装することについて簡単にグーグルで検索したところ、 http ://www.javapractices.com/topic/TopicAction.do?Id=71 が見つかりました。
それには次のコメントがあります。
コピー コンストラクターと静的ファクトリ メソッドは、クローンの代替手段を提供し、実装がはるかに簡単です。
私がやりたいのは、ディープコピーを作成することだけです。clone() を実装することは非常に理にかなっているように思えますが、Google で高くランク付けされたこの記事には少し不安があります。
私が気づいた問題は次のとおりです。
コピー コンストラクターは Generics では機能しません。
コンパイルできない疑似コードを次に示します。
public class MyClass<T>{
..
public void copyData(T data){
T copy=new T(data);//This isn't going to work.
}
..
}
サンプル 1: ジェネリック クラスでコピー コンストラクターを使用する。
ファクトリ メソッドには標準名がありません。
再利用可能なコードのためのインターフェースがあるのはとてもいいことです。
public class MyClass<T>{
..
public void copyData(T data){
T copy=data.clone();//Throws an exception if the input was not cloneable
}
..
}
サンプル 2: ジェネリック クラスで clone() を使用する。
clone は静的メソッドではないことに気付きましたが、保護されたすべてのフィールドの詳細なコピーを作成する必要があるのではないでしょうか? clone() を実装するとき、複製不可能なサブクラスで例外をスローするための余分な作業は、私には些細なことのように思えます。
何か不足していますか?任意の洞察をいただければ幸いです。