【问题标题】:Serialisation and sub-classes序列化和子类
【发布时间】:2011-04-05 08:19:54
【问题描述】:

如果我将一个类定义为 Serialiable,那么当我创建一个子类时,它会要求我定义一个 serialVersionUID。这是必要的还是我可以依赖超类中的那个?

【问题讨论】:

标签: java android serialization


【解决方案1】:

我曾经在单独(可能是顶级)中声明一次 SerialVersionUID,例如:

public static final long GlobalSerialVersionUID=0L;

然后在每个Serializable 类中声明:

private static final long serialVersionUID = MyTopClass.GlobalSerialVersionUID;

这种方法将保证您始终拥有相同的 SerialVersionUID,并且如果您要实现不同序列化版本之间的数据交换 - 您可以在不同序列化版本之间分支代码。

【讨论】:

    【解决方案2】:

    如果您更改类的实现,但仍希望能够序列化/反序列化以“旧”格式保存的对象,则使用 SerialVersionUID。所以这意味着如果你想改变子类而不是超类,你也必须在子类中实现它。但是,如果您不需要这种“版本控制”,则根本不必使用 SerialVersionUID。

    【讨论】:

    • 在这种情况下,我是否会覆盖警告而不定义它?如果是这样,当我更新我的应用程序并且由于之前的保存而尝试恢复捆绑包时会发生什么?
    • 是的,你覆盖它。但是,如果捆绑包与早期版本一起保存,您将无法从捆绑包中恢复。我不确定您是否会收到异常或只是没有加载任何对象。你可以在这里阅读序列化:java.sun.com/developer/technicalArticles/Programming/…
    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 2017-05-16
    • 2016-01-26
    • 2011-12-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多