为什么没有自动生成serialVersionUID?

为什么不serialVersionUID自动生成?我在应用程序服务器上遇到了一个问题,该服务器显然正在缓存一个旧类。

回答:

不会自动生成serialversionuid,因为它很危险。设置serialversionuid时,表示类的两个版本在序列化方面兼容。

假设您有一个名为Foo的类,并且它

(默认值),并且将Foo的实例序列化为文件。稍后,您将一些新成员添加到Foo类。如果尝试从文件中反序列化Foo对象,则会出现序列化失败,指出对象不兼容。他们

不兼容的,这是 你想要的东西 ,这是默认。它们不兼容,因为无法从旧的序列化Foo实例初始化Foo类中的新成员。

现在,您可能会说:“我不在乎,在我的应用程序中,可以将那些字段初始化为可接受的”。如果 确实 如此,则可以将

Foo类的serialversionuid设置为与

Foo类相同。这将告诉Java这些对象在可序列化方面是兼容的,并且当您将旧的Foo实例反序列化为新的Foo类时,Java将不会抱怨(但是新字段仍将未初始化)。

如果您是第一次创建新类,并且设置了serialversionuid,则 。该合同是,

“对于具有相同serialversionuid的此类的所有将来版本,我将保证它们在状态和序列化方面都是兼容的”

如果更改了一个类,并且 明确禁止

对旧版本进行反序列化,则可以将serialversionuid更改为新值。如果尝试将旧对象反序列化为新的类实例,则将引发异常。

以上是 为什么没有自动生成serialVersionUID? 的全部内容, 来源链接: utcz.com/qa/413340.html

回到顶部