要求用戶從某個給定集合中選擇一個ID。我檢查我的收藏中是否存在該ID,如果不是,我會拋出IndexOutOfBoundsException
並在稍後抓到它。我是否可以將這種例外情況用於此目的,還是僅僅是一種非常糟糕的做法?拋出異常 - 使用
0
A
回答
1
拋出異常沒有什麼意義,如果你面對的真正特殊情況
如果你的類的合同假設不是用戶從不查詢不在值引發異常收集,那麼異常是好的。也許IllegalArgumentException或類似的東西。
否則會導致樣板代碼,並且有時會導致由於堆棧展開和異常傳播顯著的性能下降
所以它是一種權衡是否拋出異常,或者返回一些預先定義的值
我建議在你的情況下返回「null」。
2
如果將ID
作爲參數傳遞給某個方法,並且希望將其作爲事前條件的一部分進行檢查,則可以輸入IllegalArgumentException
或RuntimeException
。
IndexOutOfBounds
沒有意義,因爲它在這裏很混亂。這是當你做一個訪問越界
0
取決於上下文,但是IMO如果要查找ID,這個概念不與位置參考綁定,這可能是特定應用異常–的濫用,也可能是特定於應用的ItemNotFound或等價物。
如果您的API有一個合約,指定您要麼返回一個有效的對象,要麼拋出一個異常,然後拋出異常。如果有意義,也可以考慮使用NullObject模式。
0
如果調用工程23
和呼叫工程47
,並沒有在此期間改變,那麼它不會爲35
工作原因不能是一個指數是出界。
1
就我個人而言,我會拋出一個檢查異常,所以調用方法被迫抓住它。你可以做的是叫
initCause
異常,並設置這是拋出:IllegalArgumentException
例如
public method(int i) throws MyException {
if (i < 0) {
MyException e = new MyException();
e.initCause(new IllegalArugmentException());
throw e;
}
}
我可能還調用正確的corectors的消息傳遞給當拋出異常,清楚發生了什麼事情。
相關問題
- 1. 魔術異常拋出拋出異常
- 2. 使用CustomConverters拋出異常
- 3. 拋出異常拋出異常
- 4. 拋出異常不拋出
- 5. 異常拋出異常
- 6. 拋出異常
- 7. 異常拋出
- 8. 拋出異常
- 9. 拋出異常
- 10. 拋出異常
- 11. 拋出異常
- 12. 拋出異常
- 13. 拋出異常
- 14. PHP中使用「使用」拋出異常
- 15. PDFBox拋出異常:空引用異常
- 16. webEngine.executeScript();拋出異常
- 17. LLVM異常拋出
- 18. encodeURIComponent拋出異常
- 19. StringBuilder.AppendFormat拋出異常
- 20. Android拋出異常
- 21. 類拋出異常
- 22. PerformanceCounter拋出異常
- 23. CrystalDecisions.CrystalReports.Engine.ReportDocument'拋出異常
- 24. BeginInvoke拋出異常
- 25. OracleConnection拋出異常
- 26. Request.Form拋出異常
- 27. IsDBNull拋出異常
- 28. 異常拋出InputOutputArray
- 29. System.Transactions.Diagnostics.DiagnosticTrace拋出異常
- 30. VB.NET拋出異常
ID作爲參數傳遞。比我做一些東西,看看它是否在集合中,如果不是我拋出異常。現在,我認爲只有在執行函數之前,我明確知道什麼值不允許爲null之類的情況下,我纔可以拋出該異常。所以在我的情況下,我可能無法使用它。 – lunar