2009-09-23 173 views
13

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

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

这将是很好,它可以结合IDE保存操作或类似的东西,这样我可以恢复更改,如果我这样做,不会影响序列化。

最好的问候, Touko

编辑:@gustafc:主要有两个点是:

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

这听起来是合理的?

苏玛summarum,经过思考,在每个变化增加了自动递增的serialVersionUID甚至会更好......

+0

你为什么要这样做?如果你没有指定一个,编译器会自动生成与Eclipse相同的'serialVersionUID'。指定一个'serialVersionUID'的整个观点是它*不应该改变,除非你做出重大改变(改变类层次结构或移除字段)。 – gustafc 2009-09-23 08:07:01

+0

@gustafc:看到编辑 – Touko 2009-09-23 08:20:54

回答

4

有在Eclipse没有标准的功能做到这一点。

0

这个ID不会自动更新,因为我改变了文件,除非我再次生成这个文件。

AFAIK默认serialVersionUID就是这一点 - 一个ID生成基于当前一类的“形状”。所以如果你想在你改变任何东西的时候生成你的id,那么就把它丢掉吧。

但是,如果您只是有时想更改serialVersionUID - 只需更改即可。随机修改ID会做。

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

+0

然而,“只是把它抛出去”依赖于编译器。如果序列化实际上正在使用,其他Java版本/编译器正在使用等等,依靠一些您无法控制的东西并不是一个好主意。 – 2013-01-02 23:24:48