建议通过接口声明常量

时间:2013-03-17 05:32:25

标签: java inheritance interface serialversionuid

我一直在为我的一个小宠物项目播放可序列化界面一段时间,我经常会注意到我应该如何定义静态最终长serialVersionID

我一直在寻找一种方法来让我自己的接口产生类似的警告(在任何类中实现它都强制/推荐一个常量的声明)并且到目前为止还没有找到任何东西。 Seralizable界面只是一个标记界面,因此它实际上并不包含任何内容,而我最接近回答我的问题的是this thread on dreamincode

任何人都可以提供帮助,因为这听起来像是一个非常有用的功能吗?

2 个答案:

答案 0 :(得分:0)

最简单的方法是简单地声明一个值。类似的东西:

private static final long serialVersionUID = 1L;

执行此操作的原因是控制对象的序列化/反序列化。如果序列化没有serialVersionUID的类的实例,系统将从当前类定义生成一个实例。如果以任何重要方式更改类,系统生成的ID将更改。反过来,这将阻止您反序列化使用旧id序列化的对象。

如果您正在序列化对象但没有持久化它们,那么可能不需要定义ID(除了摆脱编译器警告)。

有关详细信息,请参阅this thread

答案 1 :(得分:0)

serialVersionID(字段) 声明为Serializable接口的成员。字段名称仅仅是一种约定,字段在运行时通过反射访问。无法使用interfaces来定义字段合同。

警告是“编译器魔术”,它知道它在遇到实现没有这样一个字段的Serializable的类型时应该发出警告。此警告行为不能仅为应用程序代码中的其他字段模拟 - 获取类似警告需要使用[自定义]编译器或了解所需启发式的lint / code-checker。