Java 为什么我的异常类需要序列化?

Java 为什么我的异常类需要序列化?,java,exception,serialization,deserialization,serialversionuid,Java,Exception,Serialization,Deserialization,Serialversionuid,当您使用类异常(用于创建新异常)扩展类时,会收到一条警告,提示您使用serialVersionUID。我知道,serialVersionUID在序列化和反序列化时起着重要的作用,但是当我的异常需要序列化时?有谁能给我一个实际的例子,让我的自定义异常类进行序列化和反序列化吗?这是因为所有异常的根类,Throwable实现了Serializable接口。默认情况下,所有异常都是可序列化的,这是一种语言设计决策,因为作者希望异常能够在没有任何特殊配置的情况下通过网络发送 如果基类不可序列化,那么在远程

当您使用类异常(用于创建新异常)扩展类时,会收到一条警告,提示您使用
serialVersionUID
。我知道,
serialVersionUID
在序列化和反序列化时起着重要的作用,但是当我的异常需要序列化时?有谁能给我一个实际的例子,让我的自定义异常类进行序列化和反序列化吗?

这是因为所有异常的根类,
Throwable
实现了
Serializable
接口。默认情况下,所有异常都是可序列化的,这是一种语言设计决策,因为作者希望异常能够在没有任何特殊配置的情况下通过网络发送


如果基类不可序列化,那么在远程方法失败的情况下,您将很难准确地传达出发生了什么错误,因为您无法控制内置异常类型。

如果您的自定义异常曾经在分布式应用程序中使用过(使用RMI、Spring http invoker等)并且可以从从远程客户端调用的服务器方法中抛出,然后必须序列化异常才能跨线转到客户端。

您唯一的选项是为您定义的每个
异常类型定义
serialVersionUID
(IDE可以为您生成)或抑制警告

你可能会发现我先前的问题是相关的