Javaを使用して浅いクローニングでオブジェクトの複製参照を作成しました。しかし、オブジェクトを更新すると、参照されたクローンに格納されている文字列は更新されません。どうして? 基底クラスは、mainメソッドを持つJavaで浅いクローニングプロセスを使用しているときに元のオブジェクトが変更されたときにクローンが更新されない場合の対処方法
public class Base {
String name;
int price;
public Base(String a, int b) {
name = a;
price = b;
System.out.println("The " + name + " is " + price + " rupees.");
}
public Base(Base ref) {
this.name = ref.name;
this.price = ref.price;
}}
クラスは
public class ShallowCloning {
String name;
int price;
Base ref;
public ShallowCloning(String a, int b, Base c) {
name = a;
price = b;
ref = c;
}
public ShallowCloning (ShallowCloning once) {
this.name = once.name;
this.price = once.price;
this.ref = once.ref;
System.out.println("The " + name + " is " + price + " rupees.");
}
public static void main(String args[]) {
Base pet = new Base("fennec fox", 8000);
ShallowCloning obj = new ShallowCloning("Sugar glider", 5000, pet);
ShallowCloning clone = new ShallowCloning(obj);
System.out.println(obj.name);
obj.name = "Dog";
System.out.println(obj.name);
System.out.println(clone.name); //Still getting the previously assigned string.
System.out.println(obj.ref);
System.out.println(clone.ref);
}}
は、このプロセスで値を更新し得るために、私のコードを変更する方法はあり、あるのですか?
クローンはこれ以上同じオブジェクトではありません。 'clone'を' obj'と同じにするには 'clone = object;'を使います。 –
私はあなたがクローニングの目的を誤解していると思います(すなわち:**新しい**しかし同じオブジェクトのインスタンスを作成する)。すべての変更が他のオブジェクトにも反映されるようにするには、クローニングは不可欠です。 –
私は、ShallowCloningとしてコードする場合クローン= obj;私はまだ両方のオブジェクトで発生した変更を反映することができます。 –