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

56

当你通过扩展Exception类(用于创建新的异常)时,会得到一个警告要求添加serialVersionUID。我知道在序列化和反序列化中serialVersionUID扮演了重要的角色,但是我的异常需要进行序列化吗?有人能给我提供一个实际情况,在这种情况下我需要让自定义异常类进行序列化和反序列化?

3个回答

69
这是因为所有异常的根类Throwable实现了Serializable接口。默认情况下,所有异常都是可序列化的,这是一种语言设计决策,因为作者希望异常能够在没有特殊配置的情况下能够被发送到远程。如果基类不可序列化,则在远程方法失败时很难传达确切的错误信息,因为您无法控制内置异常类型。

14
如果您的自定义异常在分布式应用中被使用(使用RMI、Spring http-invoker 等),并且可能从远程客户端调用的服务器方法中抛出,则该异常必须进行序列化以跨越网络,然后传输给客户端。

6
你唯一的选择是对你定义的每一种Exception类型都定义serialVersionUID(IDE可以为你生成),或者抑制警告。你可能会发现我早期的问题explicit serialVersionUID considered harmful?相关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接