Java 如何克隆未实现可克隆的实例?
我的框架处理任何类的域对象。我需要能够浅层克隆这样一个域对象实例Java 如何克隆未实现可克隆的实例?,java,clone,shallow-clone,Java,Clone,Shallow Clone,我的框架处理任何类的域对象。我需要能够浅层克隆这样一个域对象实例foo,就像它实现了Cloneable(它没有实现)一样,并且我在其上调用了object.clone(),这将返回浅层克隆 class A{ private int a; private int[] b; public int getA() { return a; } public void setA(int a) { this.a = a; }
foo
,就像它实现了Cloneable
(它没有实现)一样,并且我在其上调用了object.clone()
,这将返回浅层克隆
class A{
private int a;
private int[] b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int[] getB() {
return b;
}
public void setB(int[] b) {
this.b = b;
}
public static A shallowCopyOf(A instanceOfA){ //performs shallow copy
A newInstance = new A();
newInstance.setA(instanceOfA.getA());
newInstance.setB(instanceOfA.getB());
return newInstance;
}
}
不起作用的事情:
- 强制foo的类实现
,从而实现公共方法Cloneable
clone()
- 通过反射调用foo.clone()。它抛出
,因为CloneNotSupportedException
的类没有实现foo
Cloneable
- 序列化和反序列化foo:我需要一个浅拷贝,而不是一个深拷贝
的类在编译时是未知的foo
可能有未作为getter/setter公开的字段foo
class A{
private int a;
private int[] b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int[] getB() {
return b;
}
public void setB(int[] b) {
this.b = b;
}
public static A shallowCopyOf(A instanceOfA){ //performs shallow copy
A newInstance = new A();
newInstance.setA(instanceOfA.getA());
newInstance.setB(instanceOfA.getB());
return newInstance;
}
}
最后,您可能更容易基于自己的反射来实现它(正如hoaz所建议的),因为大多数bean映射库都尝试执行深度复制,并且您似乎有一些特殊的要求(例如支持复制私有字段)。创建复制构造函数,或者使用反射遍历所有字段并将它们复制到新实例1。你不应该这样做;这是不可能的,事实上,如果可能的话,那将是一件坏事。@nos不,澄清了这个问题以反映这一点。TNX与限制不兼容“foo的类在编译时是未知的”一位同事也与我联系