2013-03-13 28 views
2

我想拋出一個具有特定名稱的異常,並且這種異常已經存在於雙面打包中。從雙面軟件包中拋出異常是否正確?

E.g. UnexpectedException in java.rmi。我沒有使用rmi packege的任何設施,但是例外的名稱是,正好是我需要的

我可以在我自己的上下文中拋出異常,或創建一個具有相同名稱的新異常。哪種方法更好?

+0

用相同的名稱創建並使用它。 – 2013-03-13 16:05:15

回答

5

僅僅因爲名稱是正確的並不意味着其他任何東西。看的說明中,例如:如果一個遠程方法調用的客戶端接收,

的UnexpectedException拋出作爲呼叫,檢查異常不是在拋出聲明的經檢查異常類型中的結果遠程接口中方法的子句。

這是否實際上描述你的例外試圖代表什麼?我懷疑不是。假設你是一個客戶端 - 你會想知道爲什麼地球上你不得不趕上(或聲明)與RMI有關,儘管你的代碼庫沒有與RMI相關。奇怪的是會在整個代碼中傳播。伊克。

2

當您查看例外的完全限定名稱時,java.rmi是其名稱的一部分。考慮一個程序員使用你的代碼閱讀來期待java.rmi的異常,這可能會引起一陣眉毛,因此是一個壞主意。

考慮到這個例外,特別是:是什麼意外?您可以改爲命名您的班級UnexpectedSomethingException,使其更清楚地發生了什麼。

1

@Jon Skeet@akaIDIOT已經提供了相當不錯的答案。我只會添加幾個與您的問題相關的示例:

這將是奇怪和困惑從擁有無關,與RMI方法處理java.rmi.UnexpectedException

另請注意,例外的主要目的是允許客戶端代碼處理您無法處理的情況。因此,方法拋出java.io.IOException的事實意味着客戶端代碼應負責處理意外的文件輸入 - 輸出錯誤(重新檢查文件訪問/存在,基本設置)。投擲方法java.rmi.UnexpectedException給客戶端代碼提示以檢查RMI設置

+0

我已經更新了我的答案,謝謝。我很高興我沒有用逗號代替'和'。這將是尷尬。 – 2013-03-13 16:08:39

0

我強烈建議不要重複使用另一個異常,因爲它只是基於它共享所需名稱的事實。例如,在RMI的上下文之外拋出一個java.rmi.UnexpectedException將會非常令人困惑。

我不確定你打算如何使用你的異常,但對我來說,完全基於名字,聽起來像你可以使用java.lang.RuntimeException,因爲它具有相同的一般含義。

所以,我的建議是按以下順序:

  1. 使用RuntimeException的,如果它確實是一個意想不到的預期異常,你的代碼是不準備處理。如果您確實不需要比RuntimeException已經提供的任何新功能,這是最合適的。
  2. 創建您自己的自定義UnexpectedException類。真的沒有理由嚴格避免僅僅因爲其他庫已經使用某個類名而使用它。這是包的一個要點 - 提供一個命名空間來消除相同名稱的歧義。用現代的IDE,真的沒有理由關心。其他人可能會不同意 - 這是一個口味的問題 - 但我個人並沒有看到它的問題。當然沒有技術理由不這樣做。
相關問題