39

當您用類Exception(用於創建新的異常)擴展一個類時,您會收到一條警告,提示serialVersionUID。我知道serialVersionUID在序列化和反序列化過程中起着重要作用,但是當我的異常需要序列化時?任何人都可以給我一個我希望自定義異常類具有序列化和反序列化的實際案例嗎?爲什麼我的異常類需要序列化?

回答

50

這是因爲所有例外的根類,Throwable實現了Serializable接口。默認情況下,所有的異常都是可序列化的,這是一個語言設計決定,因爲作者希望異常能夠在沒有任何特殊配置的情況下通過線路發送。

如果基類不是可序列化的,那麼在遠程方法失敗的情況下,由於您不能控制內置的異常類型,您將難以明確地發生錯誤。

11

如果您的自定義異常曾用於分佈式應用程序(使用RMI,Spring http-invoker等),並且可以從遠程客戶端調用的服務器方法拋出,那麼必須將異常序列化穿過電線並去到客戶端。

相關問題