Java:如何轻松地深度克隆复杂的对象层次结构?

时间:2014-06-26 13:38:30

标签: java clone

假设我有一个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()。会设置调用每个成员的克隆方法吗?

  • 假设这是一个非常重要的问题(房屋'有'10套聚合复杂对象,而且每个'有'10套聚合复杂对象等等),有没有更好的方法实现Town的克隆方法?

或者我只是花时间在子对象和子子对象上实现100 .clone()个方法? (这会比在所有子对象上实现序列化并以这种方式执行更多或更少的工作吗?)

1 个答案:

答案 0 :(得分:1)

您有几个选择:

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