【发布时间】:2015-08-28 17:24:07
【问题描述】:
您好,我正在用 Java 开发一个用于学习目的的游戏,并且有一个关于应用内数据处理的问题
假设我有一堆 xml 文件存储各种统计数据、武器盔甲等,我将这些文件作为列表解析到我的应用程序中;
请注意,此数据永远不会改变,并且实际上是“最终的”,游戏将使用恒定数据。
现在我的问题是,您是否会将这些数据(供游戏运行时使用)存储在您可以轻松访问的应用程序中的一个类(在我的示例中为单例)中?因此,例如像这样(XML 解析器在其他地方读取了列表)
public class WeaponData {
private List<Weapon> weaponData;
public static final WeaponData instance = new WeaponData(parseXml("weapons"));
private WeaponData(List<Weapon> data) {
weaponData = data;
}
public static WeaponData getInstance() {
return instance;
}
public List<Weapon> getWeaponData() {
return weaponData;
}
}
并允许我将数据用于
WeaponData.getInstance().getWeaponData();
如果是这样,这是解决方法,还是有更好的方法?
或者,我能想到的唯一替代方法是在需要时继续读取 XML(这似乎不明智,特别是,这种数据检索可能(至少对于商业应用程序)是网络操作,即使在我的如果它只是一个硬盘读取)。另外,如果有其他任何内容,它将是重复的代码。
感谢您的宝贵时间!
【问题讨论】:
-
你能给我概述一下 XML 有多大吗,因为对于小的 XML 来说,将它们保存在数据库中需要做很多工作,而且收益并不多,你可以将值缓存在磁盘,但你会增加复杂性,这就是为什么对我来说知道 XML 文件的大小很重要。如果我们谈论的是 Kbs,我建议保持原样。
-
请注意,
final仅与引用本身有关。对存储在final变量中的对象的方法调用与final的语义无关。所以,在你上面的例子中,有人可以在List<Weapon> weaponData创建后更改其内容 -
好吧,我根本不是在谈论数据库。我想你误会了,我有一些 xml 文件,它们目前都是几 kbs,我怀疑它们会超过 500kbs 左右。但我只想知道您将如何在应用程序中(可能多次)提供这些数据。
-
@Keith,我知道,为了这个问题(不是我想知道的),我只是懒得进入不可变集合。不过还是谢谢!将在集合周围创建一个 Wrapper,以使其在实际实现时不可变。或 Collections.unmodifiableList 等