【问题标题】:Java: How to deeply clone a complex hierarchy of objects easily?Java:如何轻松地深度克隆复杂的对象层次结构?
【发布时间】:2014-06-26 13:38:29
【问题描述】:

假设我有一个类似的 java 对象(只是作为一个简单的例子)

 class Town{
     Public String name;
     Public Set<Business> Businesses;
     Public Set<Person> people; 
     Public Set<House> houses; 

     //... 
 }

房屋、人、企业等是复杂的对象,这些对象又具有自己的对象,也有自己的对象等——有些具有组合关系,有些具有聚合类型关系。

现在,我需要在 Town 类中添加一个clone 方法,我有两个问题:

  • 如何克隆houses 集?我只是实现House.clone() 并调用houses.clone()。 set 会调用每个成员的 clone 方法吗?

  • 假设这是一个不平凡的问题(房屋“有”10 组聚合的复杂对象,并且每个“有”10 组聚合的复杂对象等等),有没有更好的方法来实现Town的克隆方法?

或者我是否只需要花时间在子对象和子子对象等上实现 100 个.clone() 方法? (这会比在所有子对象上实现序列化并这样做更有效吗?)

【问题讨论】:

标签: java clone


【解决方案1】:

你有几个选择:

  1. 在所有类上实现 clone 方法,对类及其所有实例变量进行深度复制(如果您不想依赖第 3 方框架,这有时很重要)
  2. 序列化对象(可以是文本文件或字符串)。您可以通过使用 Oracle 框架 Serializable 来做到这一点,该框架有一个实例 var,用于解码有关对象的信息。更多信息在这里:http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html
  3. 这是一个可以对对象进行深层复制的第 3 方库:https://github.com/DozerMapper/dozer

有关 Deep Copy 库的更多信息:Java deep copy library

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
相关资源
最近更新 更多