オブジェクトのディープ コピー
オブジェクトを同じフィールド名を持つ別のオブジェクトにコピーする必要があります。これは BeanUtils で実現できますが、ディープ コピーを探しています。オブジェクトには別のオブジェクトのリストが含まれており、これらの「サブオブジェクト」も同様です。BeanUtils と手動コピーを部分的に使用することで、これを実現できます。
public class MindBO implements Serializable {
private String mid;
private String name;
private List<TagBO> tags;
/* Getters and Setters */
}
public class MindEO implements Serializable {
private String mid;
private String name;
private List<TagEO> tags;
/* Getters and Setters */
}
public static MindEO copy(MindBO mBO) {
MindEO mEO = new MindEO();
try {
BeanUtilsBean bub = BeanUtilsBean.getInstance();
Map<?,?> props = bub.describe(mBO);
// Remove non-trivial List field
props.remove("tags");
// Copy other fields
bub.populate(mEO, props);
// Copy List manually
if(mBO.getTags() != null) {
List<TagEO> mEOTags = new ArrayList<TagEO>();
for(TagBO tBO : mBO.getTags()) {
mEOTags.add(map(tBO));
}
mEO.setTags(mEOTags);
}
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
return mEO;
}
ただし、このアプローチは面倒で、エラーが発生しやすく、スケーラブルではありません。これを行うより良い方法はありますか?