我的框架处理任何类的域对象。我需要能够浅层克隆这样一个域对象实例foo
,好像它实现了Cloneable
(它没有),我在它上面调用了Object.clone()
,它返回了一个浅层克隆
不起作用的事情:
Cloneable
,以及公共方法clone()
。Object.clone()
)。它会抛出CloneNotSupportedException
,因为foo
的类没有实现Cloneable
。限制:
foo
的类在编译时不知道。foo
可能包含未作为getter / setter公开的字段。注意:有几个类似的问题,但似乎没有人专注于获得浅层克隆。
答案 0 :(得分:3)
BeanUtils可以克隆不可克隆的Bean,只要它们具有setter / getter即可。不幸的是,Orika bean映射器也不支持私有字段的映射。
最后,您可能更容易根据自己的反射来实现它(正如hoaz建议的那样),因为大多数用于bean映射的库都尝试执行深层复制,并且您似乎有一些特殊要求(例如作为复制私有字段的支持。)
答案 1 :(得分:0)
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;
}
}