我一直在为我的一个小宠物项目播放可序列化界面一段时间,我经常会注意到我应该如何定义静态最终长serialVersionID
。
我一直在寻找一种方法来让我自己的接口产生类似的警告(在任何类中实现它都强制/推荐一个常量的声明)并且到目前为止还没有找到任何东西。 Seralizable
界面只是一个标记界面,因此它实际上并不包含任何内容,而我最接近回答我的问题的是this thread on dreamincode。
任何人都可以提供帮助,因为这听起来像是一个非常有用的功能吗?
答案 0 :(得分:0)
最简单的方法是简单地声明一个值。类似的东西:
private static final long serialVersionUID = 1L;
执行此操作的原因是控制对象的序列化/反序列化。如果序列化没有serialVersionUID
的类的实例,系统将从当前类定义生成一个实例。如果以任何重要方式更改类,系统生成的ID将更改。反过来,这将阻止您反序列化使用旧id序列化的对象。
如果您正在序列化对象但没有持久化它们,那么可能不需要定义ID(除了摆脱编译器警告)。
有关详细信息,请参阅this thread。
答案 1 :(得分:0)
serialVersionID
(字段) 声明为Serializable接口的成员。字段名称仅仅是一种约定,字段在运行时通过反射访问。无法使用interfaces来定义字段合同。
警告是“编译器魔术”,它知道它在遇到实现没有这样一个字段的Serializable的类型时应该发出警告。此警告行为不能仅为应用程序代码中的其他字段模拟 - 获取类似警告需要使用[自定义]编译器或了解所需启发式的lint / code-checker。