這是更好的實踐問題。我希望可以在這裏提出這個問題。我正在創建一個將被用作我們API的一部分的接口。我有一個名爲getSomeObject()
的方法,它在後臺具有複合邏輯,並返回SomeObject
。我在幕後調用了引發IllegalArgumentException
的方法,所以有可能我的getSomeObject()
方法可能會拋出此異常。我遇到的問題是API的用戶不熟悉API的內部工作原理,不理解拋出異常的原因。由於參數是在我的方法內部創建的,用戶甚至不知道這個參數存在。我試圖記錄它,但是這個異常的原因會讓API的用戶感到困惑。所以我的問題是,這樣的情況最好的辦法是什麼?什麼是記錄此異常的正確方法?記錄由未知參數引起的異常的最佳實踐
回答
從不接受任何參數的方法拋出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`.
感謝您的回覆assylias。如果用戶不知道方法init(),該怎麼辦? – robonerd 2013-02-14 16:57:13
@robonerd最終,用戶需要能夠正確使用您的API。所以我猜想只有三種可能:(i)用戶可以採取額外的步驟來避免IllegalArgumentException,並且需要記錄這些額外的步驟(ii)您的代碼需要做某些事情來避免該異常,並且應該這樣做或者)在運行時,會發生一些讓您的API無法使用的情況,您應該拋出一個適當的異常(可能會檢查),讓API用戶知道某些事情真的發生了錯誤(例如,數據庫訪問不可用)。 – assylias 2013-02-14 17:01:18
我的答案與案例(i)或(iii)有關。 – assylias 2013-02-14 17:02:54
,你怎麼處理呢?
是否由用戶錯誤輸入引起的?
如果不是,那麼你應該抓住它並處理它,如果仍然必須拋出它,它必須被翻譯成用戶可以理解的例外
或者是這種情況發生的可能性並且純粹是理論性的嗎?
如果這是一個有效的異常情況,用戶應該處理您應該拋出一個適當的檢查異常,並在您的界面聲明
- 1. 異常記錄器:最佳實踐
- 2. GWT服務異常日誌記錄的最佳實踐
- 3. 記錄ASP.NET - 最佳實踐
- 4. 處理異常的最佳實踐
- 5. 異常處理的最佳實踐
- 6. (錯誤)記錄的最佳實踐
- 7. 服務結構未處理的異常和最佳實踐
- 8. Python異常處理 - 最佳實踐
- 9. 處理PyMySql異常 - 最佳實踐
- 10. 異常處理最佳實踐
- 11. 顯示單個記錄 - 最佳實踐
- 12. 最佳實踐 - 存儲過程記錄
- 13. SQL常數值的最佳實踐
- 14. 將實時數據記錄到NoSQL DB中的最佳實踐
- 15. Codeigniter路由最佳實踐
- 16. JavaScript函數參考的最佳實踐
- 17. 指示Func/Proc引發異常(如Java)。最佳實踐?
- 18. 異步Webrequest最佳實踐
- 19. Node.js的最佳實踐異常處理 - 在異步/等待
- 20. Prolog最佳實踐參考?
- 21. 函數參數最佳實踐
- 22. 在實用程序類中拋出異常的最佳實踐
- 23. 由空命令參數引起的空引用異常?
- 24. Facebook登錄最佳實踐
- 25. MVC路由的最佳實踐
- 26. UIKeyboard通知的最佳實踐 - iPhone SDK
- 27. 在C++/CLI中實現常量引用的最佳實踐
- 28. MySQL的:最佳實踐來獲得最後一個記錄
- 29. Laravel異步請求的最佳實踐
- 30. 最佳實踐:數據庫引用表
將它包裝在你自己的例外,解釋它發生的原因。 – millimoose 2013-02-14 16:42:34
我的建議是在getSomeObject()方法中捕獲IllegalArgumentException異常,並拋出一個特定於api的異常。 – Davz 2013-02-14 16:43:35