14

Eclipse 很好地为我生成了 serialVersionUID。但这似乎是被动代码生成,因为除非我再次生成,否则当我更改文件时 id 不会自动更新。

每次我更改内容时,是否有某种方法可以生成 serialVersionUID?“保存操作”似乎不包含这样的选项 - 有人找到了这样做的方法吗?

最好将它与 IDE 保存操作或类似的东西结合起来,这样我就可以在不影响序列化的情况下恢复更改。

最好的问候, Touko

编辑:@gustafc:这有两个要点:

  • 如果我理解正确,不同的编译器最终可能会得到不同的 serialVersionUID 值
    • 来自Serializable API但是,强烈建议所有可序列化类显式声明 serialVersionUID 值,因为默认的 serialVersionUID 计算对类细节高度敏感,可能会因编译器实现而异,因此可能会在反序列化期间导致意外的 InvalidClassExceptions
  • 我正在使用一种命令模式,比如在服务器上做事的对象。因此,即使对象内容没有改变,在客户端和服务器端的类内容不同的情况下也能很好地捕捉到。
    • 但是再想一想,这可能不适用于自动生成的值,因为只有内容更改会改变它?所以,实际上我想要一个自动递增的serialVersionUID

这听起来合理吗?

Summa summarum,经过更多思考,在每次更改时自动递增的 serialVersionUID 会更好......

4

3 回答 3

4

Eclipse 中没有执行此操作的标准功能。

于 2009-09-23T07:53:13.870 回答
2

You could update the serial version at build time with the Ant SerialVer task.

于 2009-11-17T07:21:45.023 回答
0

除非我再次生成,否则当我更改文件时,id 不会自动更新。

AFAIK 默认serialVersionUID就是这样——基于类的当前“形状”生成的 id。因此,如果您希望在更改任何内容时生成您的 id - 只需将其保留。

但是,如果您只想serialVersionUID偶尔更改 - 只需更改它。随机修改 id 即可。

随机数只比连续数好一点(如果您可以假设没有其他人在您的环境中组成具有相同限定名称的类),因此您甚至可以随意从serialVersionUID = 1这个数字开始并递增。

于 2013-01-02T23:13:36.420 回答