我正在写一个游戏,它有一套应该从/到XML文件中加载或保存的规则。参考文献的XML序列化
我有一个单元类型类可以序列化和反序列化自己。 我也有一个派系类可以加载/保存到XML。 和我有一个规则类,其中包含
UnitType[] unitTypes;
Faction[] factions
当装载规则,我第一次加载所有单位类型对象及其引用存储到unitTypes
然后我加载派别和商店对它们的引用到factions
;
但是,Faction
类也有一个成员数组UnitType[] accessibleUnitTypes
,该成员数组显示此派别可以构建哪些单位类型,并且我也需要加载它。
这里谈到的问题:既然一提的是只是一个地址,序列化是没有意义的(并且也不可能在Java中),所以我需要创建UnitType
类中的特殊领域long ID
和特殊经理类有一个方法getUnitTypeByID(long ID)
。从现在开始,每当我创建一个对象时,我需要在Manager
(Manager
有一个HashMap<Long, UnitType>
,它将ID映射到对象)内注册它。
现在问题是在java中我不能显式删除对象。我可以从finalize()
方法中的Manager
取消注册对象,但由于对象的引用仍在Manager
中,因此finalize()
将永远不会被调用。
这让我写了onDeleting()
里面的另一种方法UnitType
,每当不再需要对象时,应该在C++中调用它,就像delete
一样。 onDeleting()
方法会告诉Manager
删除对象的引用。
在上面的例子中,我只提到了一个需要onDeleting()
方法的类,但是说,我有一个类的整体层次,并且他们都需要序列化和反序列化为XML。
我最终需要将onDeleting()
方法添加到任何这样的类中,并确保在此方法内部的任何memeber变量运行它们的onDeleting()
等等。现在看起来很像C++,你可以在指针上调用delete。这可能不是Java的方式来做到这一点。有其他选择吗?
+1 - 有关@ XmlID/@ XmlIDREF的更多信息,请查看:http://bdoughan.blogspot.com/2010/10/jaxb-and- shared-references-xmlid-and.html – 2011-06-05 21:34:26
感谢您的帮助!会试试这个 – iseeall 2011-06-05 23:07:57