我的框架处理任何类的域对象。我需要能够浅克隆这样一个域对象实例 foo
,就好像它实现了 Cloneable
(它没有),并且我调用了 Object.clone ()
它返回一个浅克隆。
不起作用的事情:
- 强制 foo 的类实现
Cloneable
并因此实现公共(public)方法clone()
。 - 通过反射调用 foo.clone()(到达 protected 方法
Object.clone()
)。它会抛出CloneNotSupportedException
,因为foo
的类未实现Cloneable
。 - 序列化和反序列化 foo:我需要浅拷贝,而不是深拷贝。
限制:
foo
的类在编译时是未知的。foo
可能有未公开为 getters/setters 的字段。
注意:有几个类似的问题,但似乎没有一个关注于获得浅克隆。
最佳答案
BeanUtils可以克隆不可克隆的 Bean,只要它们具有 setter/getter。不幸的是Orika bean 映射器也不支持私有(private)字段的映射。
最后,您根据自己的反射来实现它可能会更容易(正如 hoaz 所建议的那样),因为大多数用于 Bean 映射的库都尝试执行深层复制,并且您似乎有一些特殊的要求(例如作为对复制私有(private)字段的支持)。
关于java - 如何浅克隆未实现 Cloneable 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13647228/