gpt4 book ai didi

java - 将过时的存储类转换为更新的类

转载 作者:行者123 更新时间:2023-12-01 12:22:25 25 4
gpt4 key购买 nike

我在类(class)方面遇到了问题。我将数据作为 Java 对象存储在可序列化类中,而不是在某些地方作为一系列变量。但是,当我对相关类进行更改时,Java 会立即抛出错误。

例如,这是一个旧类:

class Demo implements Serializable{
private int a; private int b; int c;
public void doSomething(){}
public void doSomethingElse(){}
}

更新为:

class Demo implements Serializable{
private int a; private private int b; private int c; private String x; private String y; private String z;
public void doSomething(){}
public void doSomethingElse(){}
public void doAnotherThing(){}
public void doYetAnotherThing(){}
}

有没有一种方法可以将旧对象无缝转换为新对象,而不必将新类命名为 DemoNew 或其他名称,然后将值一一传输?

问候。

最佳答案

这就是serialVersionUID的用途。如果你在新类中声明它,并且它的值与对象被序列化时的值相同,那么Java将知道新类仍然与旧类兼容,并将初始化a、b和c(并将其他字段保留为默认值)。

因此,从抛出的错误中获取旧的serialVersionUID,并将此字段添加到类中:

private static final long serialVersionUID = ...;

当然,只有当新类仍然有效地与旧类兼容时,这才有效。如果您重命名或删除了字段,那么您必须通过显式读取序列化时的对象来使其兼容。

如果我是你,我会停止使用序列化作为长期持久性机制。选择一种易于迁移的格式:例如数据库、JSON 或 XML。

关于java - 将过时的存储类转换为更新的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26578722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com