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

时间:2011-10-07 06:27:32

标签: java exception serialization deserialization serialversionuid

当您使用类Exception扩展类(用于创建新异常)时,您会收到一条警告,要求serialVersionUID。我知道serialVersionUID在序列化和反序列化时起着重要作用,但是当我的异常需要序列化时?任何人都可以给我一个实际案例,我希望我的自定义异常类能够进行序列化和反序列化吗?

3 个答案:

答案 0 :(得分:53)

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

如果基类不可序列化,那么在远程方法失败的情况下,您将难以传达出现了什么问题,因为您无法控制内置的异常类型。

答案 1 :(得分:12)

如果您的自定义异常曾在分布式应用程序中使用(使用RMI,Spring http-invoker等),并且可以从远程客户端调用的服务器方法抛出,则必须将异常序列化为穿过电线然后去客户端。

答案 2 :(得分:4)

您唯一的选择是为您定义的每个serialVersionUID类型定义Exception(IDE可以为您生成)或禁止警告。

您可能会发现我之前的问题explicit serialVersionUID considered harmful?相关。

相关问题