我想找到一种有效的方法来克隆一个大系统对象(在我的例子中是行星系统)及其所有子对象。子对象有坐标和类似的东西,行星等。所以我猜是深拷贝..
我尝试克隆和一些可序列化的黑客攻击,似乎没有工作,副本的子对象属性并没有保持不变,因为我在制作副本之后尝试打印副本的某些行星坐标并且行星继续绕行。
我的主要目标是保存整个系统对象位置、状态等的当前状态,并在复制完成后的任何给定时间恢复到它。希望我没有误会什么。。
我使用的一种方法是使用 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));
如果您必须在以后保留对象并恢复状态,您应该使用 java 序列化或例如db4o(这真的很容易使用)。
序列化也应该起作用——你在“universe”(和“universe”本身)中聚合的每个类都应该实现 Serializable 接口,并且你不想序列化的任何字段都应该标记为transient
.