代码之家  ›  专栏  ›  技术社区  ›  Prexx

我在使用Serializable时犯了一个大错误。如何修复?

  •  2
  • Prexx  · 技术社区  · 9 年前

    我在我的android应用程序中实现了Serializable对象,以保持向后兼容性。

    不幸的是,我创建了这样的课程:

    Class Foo implements Serializable {
       private static long serialVersionUID = 928374172L;
       [...]
    }
    

    我痛苦地发现,由于缺少“final”语句,Java无法将此值识别为serialVersionUID。

    问题是我无法创建 private static final long serialVersionUID 因为已经有一个这样命名的对象…:/

    是否有机会保存这个类,或者我必须创建一个 Foo2 类并将所有保存的数据复制到其中?也许还有更好的办法?因为我必须在不丢失所有保存数据的情况下修改这个类。

    2 回复  |  直到 9 年前
        1
  •  3
  •   Community pid    7 年前

    您当前的 serialVersionUID static ,因此它不参与对象的(反)序列化。因此,添加 final 这是一个很好的例子。

    如果当前值不是默认值,请按照说明进行更改 here here .

        2
  •  1
  •   user207421    9 年前

    你需要做两件事。

    1. 运行 serialver 类上的工具 就像现在一样。 这为您提供了在进行现有序列化时假定的值,实际上是整个语句。
    2. 用工具提供的内容替换现有语句,包括关键字 final 。这不会破坏任何东西,但它将在您对其进行序列化兼容更改时防止类破坏,如对象序列化规范的版本控制章节所述。