私はJavaでclone()を実装することについて簡単なグーグルをしました、そして見つけました:http: //www.javapractices.com/topic/TopicAction.do?Id = 71
次のコメントがあります。
コピーコンストラクターと静的ファクトリメソッドは、クローンの代替手段を提供し、実装がはるかに簡単です。
私がやりたいのは、深いコピーを作成することだけです。clone()を実装することは非常に理にかなっているようですが、このグーグルランクの高い記事は私を少し恐れさせます。
これが私が気付いた問題です:
コピーコンストラクターはジェネリックスでは機能しません。
コンパイルされない疑似コードを次に示します。
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()を実装する場合、クローン不可能なサブクラスで例外をスローするための余分な作業は、私には些細なことのように思えます。
私は何かが足りないのですか?任意の洞察をいただければ幸いです。