考虑以下情况:
class A {
int x;
int y;
}
class B extends A {
int z;
}
Run Code Online (Sandbox Code Playgroud)
现在,代码中的某个地方使用这样的类:
A objA = getAFromSomewhere();
B objB = null;
Run Code Online (Sandbox Code Playgroud)
在某种情况下,我想做类似的事情
objB = objA; // can't do this
objB.z = someZ;
Run Code Online (Sandbox Code Playgroud)
当然,真实的对象有点复杂,所以它不仅仅是复制两个整数.但它们也不过分复杂.
我知道我可以像这样写一个B的构造函数:
public B(A anA) {
this.a = anA.a;
this.b = anA.b;
this.z = 0;
}
Run Code Online (Sandbox Code Playgroud)
但如果这是唯一的方法,我更喜欢将B的其他成员合并到A.
更新考虑答案
我的问题不够明确.我明白objB = objA; 不能工作(因此我要求"类似的东西",意思是代码复杂程度相似的东西),我知道浅拷贝和深拷贝的问题.
我正在寻找的是复制基类成员的可能性(假设使用clone()).您可能会理解,手动复制每个成员是一个糟糕的解决方案,因为它会增加代码的复杂性和冗余.无论如何,谢谢你的回复!
Jon*_*eet 16
对此没有简单的解决方案,因为没有一个适合所有人的解决方案.基本上你没有a内的所有信息B,所以你不能保证你会有一个"明智的" B对象.
您可能只想创建一个构造函数,在B该构造函数中将A所有A数据复制到新的中B.
如果你不害怕 commons-beanutils 你可以使用 PropertyUtils
import org.apache.commons.beanutils.PropertyUtils;
class B extends A {
B(final A a) {
try {
PropertyUtils.copyProperties(this, a);
}
catch (Exception e) {
}
}
}
Run Code Online (Sandbox Code Playgroud)