當您用類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. 我需要什麼類型的課程?