java - 抽象异常类中的串行版本 uid

标签 java exception serialization java-8

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

public class BaseException extends RuntimeException {

}

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

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

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

最佳答案

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

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

请注意,与普遍的看法相反,serialVersionUID 不需要基于类名称或结构的哈希值。当类未显式定义 serialVersionUID 字段时,只有默认计算串行版本 UID 会执行此操作。通常,您可以将其声明为一个简单的数字:

private static final long serialVersionUID = 1;

关于java - 抽象异常类中的串行版本 uid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61508485/

相关文章:

JavaFX用lambda实现call方法的回调

python - 尝试直到没有异常?

java - hbm.xml 中映射的属性可以是 transient 的吗?

ruby-on-rails - 如何检索序列化数据?

java - Spring调度不运行多线程

java - Java 中的缺失值

java - 在java记事本中查找单词jtextfield

Android:在三星设备上添加窗口失败/android.os.TransactionTooLargeException

java - 如何在 Swift 中向上传递错误堆栈跟踪

java - Akka 是否支持没有对象序列化的进程内消息传递?