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

发布于 2024-12-08 18:20:22 字数 182 浏览 0 评论 0原文

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

When you extend a class with class Exception ( for creating new exception) you get a warning to have a serialVersionUID. I know that serialVersionUID plays an important role while serialization and deserialization, but when my Exception needs to be serialized? Can anyone give me a practical case in which I want my custom-exception class to have serialization and deserialization?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

违心° 2024-12-15 18:20:22

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

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

This is because the root class for all exceptions, Throwable implements the Serializable interface. All exceptions by default are serializable and that's a language design decision because the authors wanted exceptions to be capable of being sent across the wire without any special configuration.

If the base class is not serializable, you would have a difficult time conveying what exactly went wrong in case a remote method failed since you would have no control over the built in exception types.

夜未央樱花落 2024-12-15 18:20:22

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

If your custom exception is ever used in a distributed application (using RMI, Spring http-invoker, whatever) and can be thrown from a server method that is invoked from a remote client, then the exception will have to be serialized to cross the wire and go to the client.

◇流星雨 2024-12-15 18:20:22

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

您可能会发现我之前的问题显式serialVersionUID被视为有害?相关。

Your only options are to either define serialVersionUID for every Exception type you define (the IDE can generate it for you) or suppress the warning.

You may find my earlier question explicit serialVersionUID considered harmful? relevant.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文