【发布时间】:2016-11-14 09:26:28
【问题描述】:
我有两个java类如下
public class A implements Serializable {
private String name;
private List<String> nameList;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getNameList() {
return nameList;
}
public void setNameList(List<String> nameList) {
this.nameList = nameList;
}
}
public class B implements Serializable {
private String name;
private List<String> nameList;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getNameList() {
return nameList;
}
public void setNameList(List<String> nameList) {
this.nameList = nameList;
}
}
现在我有一个 A 类对象 Aobj,两个字段都已初始化。我正在使用 BeanUtils.copyProperties(Bobj, Aobj),但只有 name 字段值被复制到 Bobj 中,但是 Bobj.nameList 为空。有没有办法深度复制一个对象,以便它复制所有字段,包括列表、地图等集合。
我在某处听说过 Dozer,但不确定这是否是为了这个目的。
【问题讨论】:
-
为什么不手动复制呢? (例如使用复制常量。)
-
是的,Dozer 正是针对这种用例而设计的。默认情况下,它在不同类类型的两个对象之间映射具有相同属性名称的字段。如有必要,您可以配置映射哪些字段、映射方式以及读取和设置值的方式。在您的特定情况下,默认映射可以正常工作。
-
@Ahmet AY 是的,我目前正在手动操作。问题是我的实际用例处理具有许多字段而不仅仅是 2 的对象,并且手动这样做对于不同的看起来太麻烦了。
-
@MarkusFischer 当然,我会研究如何使用推土机!
-
听起来像XYProblem。为什么你有两个具有完全相同属性和方法的独立类?为什么需要克隆它们?