当您使用 Exception 类扩展一个类(用于创建新异常)时,您会收到一个警告,提示您有一个serialVersionUID
. 我知道这serialVersionUID
在序列化和反序列化时起着重要作用,但是当我的异常需要序列化时呢?谁能给我一个实际案例,我希望我的自定义异常类具有序列化和反序列化?
问问题
25020 次
3 回答
64
这是因为所有异常的根类都Throwable
实现了Serializable
接口。默认情况下,所有异常都是可序列化的,这是一种语言设计决策,因为作者希望能够在没有任何特殊配置的情况下通过网络发送异常。
如果基类不可序列化,那么在远程方法失败的情况下,您将很难传达到底出了什么问题,因为您无法控制内置的异常类型。
于 2011-10-07T06:34:40.587 回答
14
如果您的自定义异常曾经在分布式应用程序中使用过(使用 RMI、Spring http-invoker 等),并且可以从远程客户端调用的服务器方法中抛出,那么必须对异常进行序列化才能跨网络然后去找客户。
于 2011-10-07T06:40:27.920 回答
5
您唯一的选择是为您定义serialVersionUID
的每种Exception
类型定义(IDE 可以为您生成它)或抑制警告。
您可能会发现我之前的问题明确的 serialVersionUID 被认为是有害的?相关的。
于 2011-10-07T06:43:12.060 回答