2013-02-14 35 views
1

這是更好的實踐問題。我希望可以在這裏提出這個問題。我正在創建一個將被用作我們API的一部分的接口。我有一個名爲getSomeObject()的方法,它在後臺具有複合邏輯,並返回SomeObject。我在幕後調用了引發IllegalArgumentException的方法,所以有可能我的getSomeObject()方法可能會拋出此異常。我遇到的問題是API的用戶不熟悉API的內部工作原理,不理解拋出異常的原因。由於參數是在我的方法內部創建的,用戶甚至不知道這個參數存在。我試圖記錄它,但是這個異常的原因會讓API的用戶感到困惑。所以我的問題是,這樣的情況最好的辦法是什麼?什麼是記錄此異常的正確方法?記錄由未知參數引起的異常的最佳實踐

+0

將它包裝在你自己的例外,解釋它發生的原因。 – millimoose 2013-02-14 16:42:34

+0

我的建議是在getSomeObject()方法中捕獲IllegalArgumentException異常,並拋出一個特定於api的異常。 – Davz 2013-02-14 16:43:35

回答

7

從不接受任何參數的方法拋出IllegalArgumentException確實很混亂。

我想你會得到這個異常,如果getSomeObject之外的東西沒有正確定義。所以,你也許可以拋出一個IllegalStateException,並將其與你的Javadoc的說明資料:當你說有你的內部代碼拋出拋出:IllegalArgumentException可能性

@throws IllegalStateException If member variable xyz is not initialised. 
           This can happen if method `init()` has not been 
           called before `getSomeObject`. 
+0

感謝您的回覆assylias。如果用戶不知道方法init(),該怎麼辦? – robonerd 2013-02-14 16:57:13

+0

@robonerd最終,用戶需要能夠正確使用您的API。所以我猜想只有三種可能:(i)用戶可以採取額外的步驟來避免IllegalArgumentException,並且需要記錄這些額外的步驟(ii)您的代碼需要做某些事情來避免該異常,並且應該這樣做或者)在運行時,會發生一些讓您的API無法使用的情況,您應該拋出一個適當的異常(可能會檢查),讓API用戶知道某些事情真的發生了錯誤(例如,數據庫訪問不可用)。 – assylias 2013-02-14 17:01:18

+0

我的答案與案例(i)或(iii)有關。 – assylias 2013-02-14 17:02:54

1

,你怎麼處理呢?
是否由用戶錯誤輸入引起的?
如果不是,那麼你應該抓住它並處理它,如果仍然必須拋出它,它必須被翻譯成用戶可以理解的例外
或者是這種情況發生的可能性並且純粹是理論性的嗎?
如果這是一個有效的異常情況,用戶應該處理您應該拋出一個適當的檢查異常,並在您的界面聲明