【发布时间】:2015-09-29 15:56:35
【问题描述】:
在没有 Java 反射的情况下进行深度对象克隆的可能性是什么?我使用了使用反射的对象克隆库,但 AppEngine 不允许这样做。
所以我现有的与 Tomcat 一起工作的应用程序不起作用。
更新:
Dozer 库似乎是最好的选择:
Mapper mapper = new DozerBeanMapper();
DestinationObject destObject = mapper.map(sourceObject, DestinationObject.class);
问题是,如果我不需要自定义映射,是否可以按原样执行上述操作?
例如:
Cat cat = new Cat();
Mapper mapper = new DozerBeanMapper();
Cat newCat = mapper.map(cat, Cat.class);
更新:
当我使用 Dozer 运行我的应用程序时,我收到此错误:
Caused by: java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.contains(Ljava/lang/String;Ljava/lang/String;)Z
at org.dozer.util.ResourceLoader.getResource(ResourceLoader.java:53)
at org.dozer.util.DefaultClassLoader.loadResource(DefaultClassLoader.java:44)
at org.dozer.config.GlobalSettings.loadGlobalSettings(GlobalSettings.java:116)
at org.dozer.config.GlobalSettings.<init>(GlobalSettings.java:67)
at org.dozer.config.GlobalSettings.<clinit>(GlobalSettings.java:46)
看起来我遗漏了一些东西,虽然我使用 Maven 添加了 Dozer。
【问题讨论】:
-
我曾经对此和
Clone was the fastestsecond was reflection和last one was serialization进行基准测试。所以我总是使用clone或copy() -
@AmitD 即使我在类中添加了 Cloneable 接口,它仍然没有 clone() 或 copy()
-
为什么不写一个适当的复制函数,就像你应该做的那样?
-
@xybrek 你需要从 Object 类中重写 clone() 方法或提供
copy constructors然后你不需要克隆
标签: java