深度复制包含所有子对象的java对象

时间:2012-05-31 19:23:31

标签: java clone deep-copy

我想找到一种有效的方法来克隆一个大系统对象(在我的情况下是行星系统)及其所有子对象。子对象有坐标和类似的东西,行星等。所以深刻的副本,我猜..

我尝试克隆和一些可序列化的黑客,似乎没有工作,副本的子对象属性没有保持不变,因为我在复制之后尝试打印副本的某些行星坐标并且行星继续轨道运行。

我的主要目标是保存整个系统对象位置,状态等的当前状态,并在复制完成后的任何给定时间恢复到它。 希望我没有误解任何事情......

2 个答案:

答案 0 :(得分:1)

如果您必须保留对象并在以后恢复状态,则应使用java序列化或例如db4o(这非常容易使用)。

序列化也应该起作用 - 您在“Universe”(和“Universe”本身)中聚合的每个类都应该实现Serializable接口,并且您不想序列化的任何字段都应标记为transient。< / p>

答案 1 :(得分:1)

我使用的一种方法是使用Codehaus(http://x-stream.github.io/)的xstream包直接序列化/反序列化。类似的东西:

XStream xs = new XStream();
MyObjectTree to;

 ///from is an instance of MyObjectTree
to = (MyObjectTree)xs.fromXML(xs.toXML(from));