Heyho、このクラスでこのコピーコンストラクタをJavaでディープコピーを作成するにはどうすればよいですか?
public class ComplexFoo {
TreeMap<String, String> field1;
double[] field2;
public ComplexFoo() {
field1 = new TreeMap<String, String>();
field2 = new double[1];
}
public ComplexFoo(ComplexFoo cf){
field1 = cf.field1;
field2 = cf.field2;
}
public static void main(final String[] args) {
ComplexFoo foo = new ComplexFoo();
foo.field2[0] = 5.0;
ComplexFoo bar = new ComplexFoo(foo);
bar.field2[0] = 3.0;
System.out.println(foo.field2[0]);
}
}
を見てこれは3.0を出力します。コピーコンストラクタは、実際のデータ構造ではなく、Array/Mapへの参照のみをコピーするためです。ディープコピーを確実にするために何を変更しなければなりませんか?
ComplexFooをフィールドとして受け取るクラスを作成すると、ComplexFoosコピーコンストラクタを使用するコピーコンストラクタを作成する必要がありますか、使用できる再帰的なディープコピーメカニズムがありますか?
public ComplexFoo(ComplexFoo cf){
field1 = new TreeMap<>(cf.field1);
field2 = Arrays.copyOf(cf.field2, cf.field2.length);
}
あなたが投稿コンパイルできないコードを:何もなしはありません'ComplexFoo()'の引数のコンストラクタであり、 'bsp'となるべきものは存在しません。 –
あなたは実際に 'clone()'メソッドを探しています。 –