本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
提问:为什么我的异常类需要序列化?
当您使用Exception类扩展一个类(用于创建新的异常)时,会收到警告,提示您有一个serialVersionUID。我知道这serialVersionUID在序列化和反序列化过程中起着重要的作用,但是何时需要对我的Exception进行序列化?谁能给我一个实际的案例,让我的自定义异常类具有序列化和反序列化?
回答1:
这是因为所有异常的根类Throwable都实现了Serializable接口。默认情况下,所有异常都是可序列化的,这是语言设计的决定,因为作者希望异常能够在没有任何特殊配置的情况下通过网络发送。
如果基类不可序列化,那么在远程方法失败的情况下,您将很难传递确切的错误信息,因为您无法控制内置的异常类型。
回答2: 如果您的自定义异常曾经在分布式应用程序中使用过(使用RMI,Spring http-invoker等),并且可以从远程客户端调用的服务器方法中抛出,则必须将异常序列化以跨越网络 然后去找客户端。
回答3:
您唯一的选择是为定义的每种Exception类型定义serialVersionUID(IDE可以为您生成),或者禁止显示警告。
本文翻译至Stack OverFlow:stackoverflow.com/questions/7…