要求用户从某个给定集合中选择一个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