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

标签 java clone shallow-clone

我的框架处理任何类的域对象。我需要能够浅克隆这样一个域对象实例 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/

相关文章:

java - 我在使用 open gl 和 glfw (LWJGL) 将模型渲染到窗口时遇到问题

java - 确定在 Hive 中创建 UDF 的语言

security - EGit 使用 1024 位或 2018 位 SSL?

git - 一种使浅层 git 克隆保持最低限度最新状态的方法?

git - 浅克隆后推送到 github

自特定提交以来的 git 浅克隆

java - StAX 不返回字符串中的所有字符

java - "ScrollView can only host 1 child"在 2 个 fragment 中,只有 1 个 child ?

git - 如何强制 git 始终使用 master 分支?

javascript - JQuery 复制/追加元素,已删除基础对象