【问题标题】:About generated serialVersionUID in Eclipse关于Eclipse中生成的serialVersionUID
【发布时间】:2012-05-10 11:27:06
【问题描述】:

有没有办法在 Eclipse 中串行生成 serialVersionUID?串行我的意思是,如果一个可序列化类的serialVersionUID = 1L,那么当我生成另一个类的serialVersionUID 时,这将是serialVersionUID = 2L。

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

Eclipse 提供了一个选择“添加生成的序列版本 ID”的选项,这个选项可以安全选择吗?

【问题讨论】:

  • 您为什么希望不同的类具有串行serialVersionUID?
  • 串行生成serialVersionUID是我的编程风格。
  • 这是单个类版本中的一种常见样式。您跨多个班级的风格是否有好处?当您稍后想要对特定类进行版本控制时,您将该类的 serialVersionUID 设置为什么,以及类之间的串行关系会发生什么?

标签: java eclipse serialversionuid


【解决方案1】:

不,在您的两种情况下都不会造成任何问题:

  • 您可以手动逐步指定它
  • 您可以让 Eclipse 为它们分配随机生成的值
  • 您可以将它们全部保留1L 用于不同的课程

序列化 UID 的目的是禁止在不同版本中对相同类进行序列化和反序列化,尤其是在没有前向兼容性的情况下(例如,新版本的类不能通过以前的定义进行序列化/反序列化)。

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

您希望同一类具有不同序列的情况是,当您更新一个类并且您希望通过先前声明的 SAME 类来禁止它的序列化时。

【讨论】:

  • @SuppressWarnings("serial") 怎么样?这将如何改变事情?推荐,不推荐?避免?
  • @ADTC 它可以工作,但受编译器不兼容的影响。请参阅可序列化接口。从 Java 7 开始:“如果可序列化类没有显式声明 serialVersionUID,那么序列化运行时将根据类的各个方面为该类计算默认的 serialVersionUID 值,如 Java(TM) 对象序列化规范中所述。但是,[…] 可能会因编译器实现而异,因此可能会导致意外”
【解决方案2】:

让我反过来回答你的问题:

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

如果您手动指定 1L、2L、3L,那就是个问题:没有比将它们都设为 1 或任何其他数字更重要的问题

连续生成序列 ID:答案是没有内置机制来执行此操作。您问这个问题的事实使我相信您不知道 serialVersionUID 的用途。即使你已经阅读了它的作用,你也应该再读一遍。

【讨论】:

  • 感谢您的回答。是的,我知道为什么要使用 sserialVersionUID,但我的编程风格是在 Eclipse 的项目中串行生成它们。
【解决方案3】:

你根本不应该这样做。这个想法是,通过遵守对象序列化规范的对象版本控制部分中的规则,在类的演变过程中尽可能长时间地保持serialVersionUID 不变。

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

【讨论】:

【解决方案4】:

java 序列化支持所有类具有相同的serialVersionUID

这用于版本控制,以便旧定义的序列化对象与新版本不兼容

查看http://java.sun.com/developer/technicalArticles/Programming/serialization/ 了解详情(向下滚动到“版本控制”)

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 2014-03-05
    • 2010-11-30
    • 2012-10-06
    • 1970-01-01
    • 2017-04-15
    • 2017-04-15
    • 2012-06-18
    • 2012-08-19
    相关资源
    最近更新 更多