我正在写一些关于
android的游戏.我想知道如何保存设置,以免出现更新问题.
例如,我使用序列化保存设置,我有类GameChar
public class GameChar implements Serializable{
int health;
int damage;
Sword sword;
}
但后来我决定为我的游戏角色增加价值装甲,我改变了类:
public class GameChar implements Serializable{
int health;
int damage;
int armor;
Sword sword;
}
现在有了更新,我放松了所有进度,因为新类GameChar与GameChar不同.
我有一个想法,使用Map< String,Object>其中key是值的名称我保存,value是我想要的任何对象(整数,浮点数,日历或一些我的用户类Sword).我将使用序列化将此Map保存到文件.
但是,如果我更改了我的一些用户类Sword,它将与我的Map中已经不一样,并且我将再次松开更新的进度.
也许有一些我想念的图案或技术让它更优雅.
最佳答案 您是否注意到,在实现Serializable时,系统会要求您声明一个名为serialVersionUID的静态长度?
此变量的目的是在反序列化时检测类的旧版本.尝试使用版本2类从保存的数据反序列化版本1对象将导致异常.
(您可以自己实现此行为,如果您不使用Java的序列化工具,它只是一个数字和if)
一旦检测到您保存的对象是陈旧的,并且与当前的类定义不匹配,您可以手动修复该问题.例如,如果你知道一个新的成员int a;在版本2中声明,并且您选择了使用版本1序列化的对象,您可以分配一个尽管在保存的信息中缺失但仍然有意义的值.
不幸的是,跟踪版本是你的工作.最简单的方法是确保可以始终从没有调整的旧版本实例化更新的版本 – 例如,将null设置为有意义的值.