1

我的框架处理任何类的域对象。我需要能够浅克隆这样一个域对象实例foo,就好像它实现了Cloneable(它没有实现)并且我调用Object.clone()它返回一个浅克隆。

不起作用的事情:

  • 强制 foo 的类实现Cloneable公共方法clone()
  • 通过反射调用 foo.clone() (到达受保护的方法Object.clone())。它抛出CloneNotSupportedException是因为foo's 类没有实现Cloneable
  • 序列化和反序列化 foo:我需要浅拷贝,而不是深拷贝。

限制:

  • foo的类在编译时是不知道的。
  • foo可能具有未作为 getter/setter 公开的字段。

注意:有几个类似的问题,但似乎没有一个专注于获得浅层克隆。

4

2 回答 2

3

BeanUtils可以克隆不可克隆的 Bean,只要它们具有 setter/getter。不幸的是, Orika bean 映射器也不支持私有字段的映射。

最后,您可能更容易基于自己的反射来实现它(正如 hoaz 建议的那样),因为大多数 bean 映射库都尝试执行深度复制,并且您似乎有一些特殊要求(例如支持用于复制私有字段)。

于 2012-11-30T15:54:57.093 回答
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;
    }
}
于 2012-11-30T14:46:21.963 回答