如何浅显克隆未实现Cloneable的实例?

时间:2012-11-30 14:34:26

标签: java clone shallow-clone

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

不起作用的事情:

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

限制:

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

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

2 个答案:

答案 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;
    }
}