我正在處理一個消息庫和一個對象的發送方法可能由於多種原因,如套接字被關閉等失敗等。拋出一個始終鏈接的異常是否有意義?
我喜歡檢查異常超過運行時異常,但我想知道是否那麼應該更早地支持異常鏈接,這樣基礎異常總是被包含在另一個更普遍的異常中。
例如,一條消息可能只會拋出檢查的SendFailedException
,但cause()
會更具體,如SocketClosedException
。這感覺就像它比單獨拋出所有檢查過的異常要少得多。
由於其他方法也可以拋出SocketClosedException
,所以繼承並不適用於此。並非每個關閉的異常都是未能發送的結果。
將cause()
中的進一步信息包裹起來會不會更合適?我不記得在野外發現以這種方式運作的例外情況,這可能是非常規的,並且讓其他人感到困惑。
Java或其他圖書館是否曾經這樣做?對我的使用情況適合嗎?
幾乎每個具有正常檢查(或未檢查)異常的庫都通過繼承來定義它們自己的異常層次結構。每當需要重新拋出一個異常時,它應該被用作原因,因爲這是它的目的。 – zapl
'並不是每個關閉的異常都是發送失敗的結果。「你能舉出一個例子:關閉的異常不是無法發送的嗎? –
嘗試在關閉後從套接字查詢無效狀態時,可能會拋出關閉的異常。 – Zhro