当您用类Exception(用于创建新的异常)扩展一个类时,您会收到一条警告,提示serialVersionUID
。我知道serialVersionUID
在序列化和反序列化过程中起着重要作用,但是当我的异常需要序列化时?任何人都可以给我一个我希望自定义异常类具有序列化和反序列化的实际案例吗?为什么我的异常类需要序列化?
39
A
回答
50
这是因为所有例外的根类,Throwable
实现了Serializable
接口。默认情况下,所有的异常都是可序列化的,这是一个语言设计决定,因为作者希望异常能够在没有任何特殊配置的情况下通过线路发送。
如果基类不是可序列化的,那么在远程方法失败的情况下,由于您不能控制内置的异常类型,您将难以明确地发生错误。
11
如果您的自定义异常曾用于分布式应用程序(使用RMI,Spring http-invoker等),并且可以从远程客户端调用的服务器方法抛出,那么必须将异常序列化穿过电线并去到客户端。
4
您唯一的选择是为您定义的每个Exception
类型定义serialVersionUID
(IDE可以为您生成)或抑制警告。
您可能会发现我的早期问题explicit serialVersionUID considered harmful?有关。
相关问题
- 1. 为什么它需要将类标记为可序列化?
- 2. 为什么序列化对象需要序列化
- 3. 为什么我们需要序列化的Web服务
- 4. 为什么我甚至需要首先序列化?
- 5. 为什么我需要初始化?
- 6. 为什么XmlSerializer需要声明为public的序列化对象的类?
- 7. 为什么我得到异常异常?
- 8. 为什么我需要我需要在子类中实现IDisposable()
- 9. 可序列化类的子类需要可序列化?
- 10. 为什么序列化时出现“System.StackOverflowException was unhandled”异常?
- 11. 意外的类型 - 序列化异常
- 12. 为什么我们不需要实现Serializable来序列化为xml
- 13. 为什么序列化需要实现类中的串行版本UID?
- 14. 序列化异常
- 15. 序列化异常
- 16. 要说自定义异常是可序列化的,最不需要的是什么?
- 17. 反序列化SortedSet:为什么项目需要实现IComparable?
- 18. 为什么我需要MEX?
- 19. 为什么我需要OleDbCommand.Prepare()?
- 20. 为什么可序列化的内部类不可序列化?
- 21. 为什么我需要按列分组,而不需要分组?
- 22. 我什么时候需要恢复Perl 6异常?
- 23. 为什么序列化模型类
- 24. 为什么我在序列化时需要指定一个xml命名空间?
- 25. 为什么我们需要瞬态关键字来防止序列化? [Java]
- 26. 为什么我要为一个匿名类“需要opCmp”?
- 27. 为什么RuntimeException不需要显式异常处理?
- 28. 为什么要实现实体类序列化
- 29. 为什么变量值异常变化
- 30. 我需要什么类型的课程?