【问题标题】:Deep copy java object with all sub-objects具有所有子对象的深拷贝 java 对象
【发布时间】:2023-03-31 21:24:01
【问题描述】:

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

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

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

【问题讨论】:

标签: java clone deep-copy


【解决方案1】:

如果您以后必须持久化您的对象并恢复状态,您应该使用 java 序列化或例如db4o(这真的很容易使用)。

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

【讨论】:

    【解决方案2】:

    我使用的一种方法是使用 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));
    

    【讨论】:

      猜你喜欢
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多