2010-09-13 76 views
3

這可能是一個關於異常處理的荒謬的Java問題,但我有一個從我的ContentProvider子類請求服務的UI actor(一個Android Activity)。當sd-card已滿,缺少sd-card,網絡i/o errros等等時,子類想要拋出一些異常。但是,當我編寫CP子類拋出異常時,編譯器提供將異常添加到CP類。顯然,我不想修改基類,但我希望UI能夠捕獲子類的異常。是否有可能通過不會拋出異常的基類的調用方法拋出java異常?

有意義嗎?這可能嗎?如果沒有,我的服務子類是否有更好的模式來將其可拋出對象返回給用戶界面?

回答

3

您只需要聲明並捕獲「已檢查的異常」。您不需要聲明或明確捕獲RuntimeException。所以你可以拋出一個RuntimeException並且在你喜歡的層次結構中捕獲它。

6

您可以拋出RuntimeException的子類的實例,這些實例不由編譯器檢查。

然而,這就是說,空的異常規範是基類方法的契約的一部分。子類滿足契約是可取的,所以子類實例可以用在任何使用超類類型的代碼中。 (這被稱爲Liskov substitution principle。)

+1

+1是唯一指出必須遵循基類合同的人。 – 2010-09-13 21:23:17

+0

這很有道理。雖然我不完全知道我需要編寫什麼,但我同意適當地擴展這些方法,以便我的類是「有效的」子類。我會研究這個。 – mobibob 2010-09-13 21:31:39

8

您可以拋出Unchecked exceptions而不必將它們添加到方法的原型中。

未經檢查的異常是從RuntimeException繼承的任何異常。那是你想要做的嗎?

+0

是的,那是我想要的。我實際上是在等待答案時開始編碼,因爲我的「解決方法」 - 但是因爲我有三個快速反應,現在我知道這不是一種解決方法,而是正確的解決方案。 – mobibob 2010-09-13 21:28:06

+0

爲你而戰! :d – jrharshath 2010-09-13 21:56:54