什么是UID用于的串行版本?

Arc*_*ald 5 java stack exception uid

我正在创建一个Java应用程序,当创建一个与ADT一起使用的接口时,它会发现需要将随机数初始化为ID号.

public class StackFullException extends RuntimeException {
    private static final long serialVersionUID = 1L;
    public StackFullException(){}
    public StackFullException(String message) {
        super(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

我很好奇是否将其删除将影响我的程序的任何后果,如果是这样,如何避免它.

Bor*_*der 9

serialVersionUID是Java序列化API的黑魔法的一部分.

它用于唯一标识类的一个版本,以便在对类进行反序列化时,可以根据加载的类的版本检查版本ClassLoader.

serialVersionUID如果没有指定序列化API,它将生成一个自身,但随后由于无关紧要的更改(或至少不破坏序列化兼容性)而随机更改.

自己添加字段可让您控制此过程 - 您可以决定何时对类进行更改会破坏旧版本的反序列化.

可以在JavaDocs中Serializable找到更多信息.

简而言之,如果您计划序列化此类,然后在以后对其进行反序列化 - 但在对代码进行一些更改并重新编译之后 - 这个字段或多或少必不可少,以确保它可以按预期工作.