當您用類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. 反序列化json數組爲vb .NET對象異常 - 無法序列化爲因爲類型需要數組
- 6. 爲什麼我需要初始化?
- 7. 爲什麼XmlSerializer需要聲明爲public的序列化對象的類?
- 8. 爲什麼我需要初始化varible類時,我想用它
- 9. 爲什麼GWT不會序列化異常的原因鏈?
- 10. 爲什麼我得到異常異常?
- 11. 爲什麼我需要我需要在子類中實現IDisposable()
- 12. 爲什麼我們需要包裝類
- 13. 可序列化類的子類需要可序列化?
- 14. 爲什麼申請需要序列號?
- 15. 爲什麼這個反序列化會拋出StackOverflow異常?
- 16. 爲什麼序列化時出現「System.StackOverflowException was unhandled」異常?
- 17. 我什麼時候需要序列化一個對象?
- 18. 爲什麼我們不需要實現Serializable來序列化爲xml
- 19. 爲什麼序列化需要實現類中的串行版本UID?
- 20. 意外的類型 - 序列化異常
- 21. 爲什麼序列化整數需要很多(81)字節?
- 22. 爲什麼spring mvc作用域變量需要序列化?
- 23. 反序列化SortedSet:爲什麼項目需要實現IComparable?
- 24. 要說自定義異常是可序列化的,最不需要的是什麼?
- 25. 爲什麼我需要「&」?
- 26. 爲什麼我需要android.permission.ACCESS_CHECKIN_PROPERTIES
- 27. 爲什麼我需要extern?
- 28. 爲什麼我需要MEX?
- 29. 爲什麼我不需要
- 30. 爲什麼我需要OleDbCommand.Prepare()?