要求用户从某个给定的集合中选择ID。我检查我的集合中是否存在该ID,如果不存在,我会抛出IndexOutOfBoundsException
并在以后捕获它。我是否可以将此异常用于此类目的,还是仅仅是一种非常糟糕的做法?
答案 0 :(得分:2)
如果将ID
作为参数传递给方法,并且您想要将其作为帖子前条件的一部分进行检查,则可以抛出IllegalArgumentException
或RuntimeException
。
IndexOutOfBounds
没有意义,因为这里令人困惑。当您进行超出范围的访问时,这是一个例外
答案 1 :(得分:1)
如果您的类的合同假设用户永远不会查询不在集合中的值,那么异常就是好的。也许IllegalArgumentException或类似的东西。
否则会导致样板代码,并且由于堆栈展开和异常传播,有时会导致性能显着下降
因此,无论是抛出异常还是返回一些预先定义的值
都需要权衡我建议在你的情况下返回“null”。
答案 2 :(得分:1)
我个人会抛出一个已检查的异常,因此强制调用该方法来捕获它。你能做的就是打电话
initCause
关于异常并将其设置为IllegalArgumentException
例如
public method(int i) throws MyException {
if (i < 0) {
MyException e = new MyException();
e.initCause(new IllegalArugmentException());
throw e;
}
}
我可能还会调用正确的corectors来传递消息,当抛出异常时很明显发生了什么。
答案 3 :(得分:0)
取决于上下文,但IMO如果你正在查找一个ID,一个与位置引用无关的概念,这将是滥用该特定异常 - 可能是特定于应用程序的ItemNotFound或等效物。
如果您的API具有指定您将返回有效对象或抛出异常的合同,则抛出异常。如果有意义的话,还要考虑一个NullObject模式。
答案 4 :(得分:0)
如果此呼叫适用于23
并且该呼叫适用于47
,并且此时没有任何更改,那么它对35
无效的原因不能是一个指数超出界限。