了解有关serialVersionUID字段的FindBugs警告

Gee*_*eek 5 java serialization

我有以下类签名和ClientEventSourc实现Serializable:

public class Grid extends ClientEventSource implements Focusable, FramingBlockWrapper,LIMSEditableField
Run Code Online (Sandbox Code Playgroud)

现在,FindBugs将其列为狡猾的:

Class是Serializable,但不定义serialVersionUID

此类实现Serializable接口,但不定义serialVersionUID字段.像添加.class对象一样简单的更改会将合成字段添加到类中,遗憾的是会更改隐式serialVersionUID(例如,添加对String.class的引用将生成静态字段类$ java $ lang $ String ).此外,字节码编译器的不同源代码可能对为类对象或内部类的引用生成的合成变量使用不同的命名约定.要确保Serializable跨版本的互操作性,请考虑添加显式serialVersionUID.

有人可以解释一下这意味着什么,解决这个问题的最佳方法是什么?

reg*_*fin 8

serialVersionUID用于反序列化您的类.它默认是自动生成的.
但是更改类中的任何内容都会生成不同的serialVersionUID,并且您无法反序列化"旧"对象.
所以你定义自己的serialVersionUID来帮助反序列化找到合适的类.

在代码中添加这样的变量:

private static final long serialVersionUID = 6106269076155338045L;
Run Code Online (Sandbox Code Playgroud)

有关生成UID的参考:

在Java中扩展Serializable类时,我选择serialVersionUID是否重要?