2012-04-30 69 views
11

有没有什么方法可以在Eclipse中串行生成serialVersionUID?串行我想表示,如果一个可序列化的类有serialVersionUID = 1L,那么当我生成另一个类的serialVersionUID时,这将是serialVersionUID = 2L。关于在Eclipse中生成的serialVersionUID

如果我手动指定1L,2L,3L等,这会产生什么问题吗?

Eclipse给出了一个选项来选择“添加生成的序列版本ID”,这个选项是否安全可以选择?

+1

你为什么要*不同的类具有串行serialVersionUIDs? –

+0

这是我的编程风格,以串行方式生成serialVersionUID。 –

+2

这是跨单个课程版本的一种常见风格。你在多个班级的风格是否有益?当你以后想要编写一个特定的类时,你为什么设置该类的serialVersionUID,以及类之间的串行关系会发生什么? –

回答

17

不,它不会在你的任何两种情况造成任何问题:

  • 你可以手动指定其增量
  • 可以让Eclipse中为它们分配随机生成的值
  • 你可以让他们所有1L不同类别

串行UID的目的是禁止的序列化和反序列化相同的类在不同版本中,特别是当没有向前兼容性(例如,新版本的类不能被先前定义序列化/反序列化)。

这是一种很少发生的情况,特别是在处理自己的项目时,这些项目不依赖于序列化的大型框架。所以你可以安全地做任何你想要的。

您希望为同一个类使用不同序列的情况是当您更新某个类并且您希望禁止使用SAME类的先前声明对其进行序列化时。

+2

'@SuppressWarnings(“serial”)'?这将如何改变事情?建议,不推荐?避免? – ADTC

+2

@ADTC它的工作原理,但受制于编译器的不兼容性。请参见Serializable接口。从Java 7开始:“如果可序列化类没有明确声明serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认serialVersionUID值,如Java(TM)对象序列化规范中所述。然而,根据编译器实现的不同,可能会有所不同,因此可能会导致意外的“ – Kissaki

2

让我回答你的问题:

添加生成的序列版本ID ...是否安全?答:是的

如果要手动指定1L,2L,3L是一个问题:没有比让他们更多的问题全部1或任何其他数目

生成序列ID顺序:答案是没有内置的机制来做到这一点。事实上,你问这个问题让我相信你不知道serialVersionUID是什么。即使你已经阅读过这些内容,你应该再读一遍。

+0

感谢您的答案。是的,我知道为什么sserialVersionUID已被使用,但它是我的编程风格,在Eclipse中的项目中以串行方式生成它们。 –

2

你不应该这样做。我们的想法是通过观察对象序列化规范的对象版本控制部分中的规则,在类的进化过程中尽可能长时间地保持常量serialVersionUID

你的'编程风格'与它无关。这是将它用于其设计目的的问题。它不是为您使用它的目的而设计的。源代码控制系统可以为你做到这一点。

+0

如果您希望自己的课程长时间有用,那么您应该只进行“兼容性更改”,所有这些都在此处@EJP提及的“对象序列化规范”中定义。 –