【问题标题】:serialVersionUID no longer required from Java 5 onwards?从 Java 5 开始不再需要 serialVersionUID?
【发布时间】:2011-11-15 03:35:58
【问题描述】:

我最近读到一条评论说,从 Java 5 开始,不再需要使用 serialVersionUID 来使同一类的不同版本兼容序列化/反序列化。它是否正确?也许它与协变返回类型混淆了。所以想和大家一起看看。​​

【问题讨论】:

  • 你能发布任何相关的链接吗?
  • 很遗憾,我无法访问该链接。内容可能已被删除。

标签: java serialization serialversionuid


【解决方案1】:

JavaDocs for Java 5 仍然声明需要它:

如果可序列化类没有显式声明 serialVersionUID,则序列化运行时将根据类的各个方面为该类计算默认的 serialVersionUID 值,如 Java(TM) 对象序列化规范中所述。但是,强烈建议所有可序列化的类都显式声明 serialVersionUID 值,因为默认的 serialVersionUID 计算对类细节高度敏感,这些细节可能因编译器实现而异,因此可能在反序列化期间导致意外的 InvalidClassExceptions。因此,为了保证在不同的 java 编译器实现之间具有一致的 serialVersionUID 值,可序列化的类必须声明一个显式的 serialVersionUID 值。还强烈建议显式的 serialVersionUID 声明尽可能使用 private 修饰符,因为此类声明仅适用于立即声明的类——serialVersionUID 字段不能用作继承的成员。

【讨论】:

【解决方案2】:

从 Java 1.4 开始,您可以使用 XMLEncoder 进行序列化,这会忽略任何 serialVersionUID,就像大多数其他序列化库一样。

但是如果你使用 ObjectOutputStream,它对 serialVersionUID 的使用并没有改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多