【问题标题】:Serial version uid in abstract exception class抽象异常类中的串行版本 uid
【发布时间】:2020-04-29 17:58:06
【问题描述】:

我有一个基本的自定义异常类BaseException

public class BaseException extends RuntimeException {

}

以及扩展BaseException的几个自定义异常

public class CustomException extends BaseException {
 private static final long serialVersionUID = 3655655808021733968L;
}

我收到关于未在 BaseException 类中声明的串行版本 uid 的警告。抽象类中是否需要它?这是一个好习惯吗?有什么办法可以消除这个警告吗?

【问题讨论】:

    标签: java exception serialization java-8


    【解决方案1】:

    是的,您需要在抽象类中定义 serialVersionUID。序列化将实例状态序列化,这通常意味着非静态字段;任何继承的状态都需要与对象的其余状态一起序列化。

    您在 BaseException 中没有字段这一事实并不意味着您应该跳过 serialVersionUID。

    请注意,与普遍看法相反,serialVersionUID 不需要基于类名称或结构的散列。只有 默认计算 串行版本 UID 这样做,当类没有明确定义 serialVersionUID 字段时。通常,您可以将其声明为一个简单的数字:

    private static final long serialVersionUID = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      相关资源
      最近更新 更多