Aniden, Java'da derin bir polimorfik kopya oluşturma sorunuyla karşılaştım. Uygulanabilirlik Clonable, sorunu benim durumumda çözer, ancak genellikle "kötü" bir teknik olarak adlandırılır. kullanılarakJava'da polimorfik kopya Java'da
com.xxx.zzz.Parent, 5
com.xxx.zzz.Child, 10,20
com.xxx.zzz.Parent, 5
com.xxx.zzz.Child, 10,20
Ve aynı şeyi başka (kısa) yolu (:
public class Parent {
int x;
public Parent() {}
public Parent(int x0) {
x = x0;
}
public Parent copy() {
Parent b = new Parent();
b.assign(this);
return b;
}
protected void assign(Parent c) {
x = c.x;
}
@Override
public String toString() {
return getClass().getName() + ", " + x;
}
}
public class Child extends Parent {
int y;
protected Child() {}
public Child(int x0, int y0) {
super(x0);
y = y0;
}
@Override
public Child copy() {
Child b = new Child();
b.assign(this);
return b;
}
@Override
protected void assign(Child c) {
super.assign(c);
y = c.y;
}
@Override
public String toString() {
return getClass().getName() + ", " + x + "," + y;
}
}
public class Test {
public static void main(String[] args) {
Parent x = new Parent(5);
Child y = new Child(10, 20);
Parent z = x.copy();
Parent w = y.copy();
System.out.println(x);
System.out.println(y);
System.out.println(z);
System.out.println(w);
}
}
çıktısı:
Yani, burada bir "hayır-Clonable" çözüm bulmak için benim çabalarıdır Yansıma): Child sınıfında copy() öğesini geçersiz kılmaya gerek yoktur. Ama bir kopya yer tutucu oluşturmak için getClass(). NewInstance() kullanmak için nasıl 'yasal' emin değilim ...
Yukarıdaki çözümlerin kullanılması değer mi yoksa daha yaygın/sağlam/basit yaklaşımlar var mı?
Teşekkür ederiz!
'Child', varsayılan bir yapıcı varsa bu işe yaramaz. –