抛出异常 - 使用

时间:2012-09-03 21:02:52

标签: java exception-handling

要求用户从某个给定的集合中选择ID。我检查我的集合中是否存在该ID,如果不存在,我会抛出IndexOutOfBoundsException并在以后捕获它。我是否可以将此异常用于此类目的,还是仅仅是一种非常糟糕的做法?

5 个答案:

答案 0 :(得分:2)

如果将ID作为参数传递给方法,并且您想要将其作为帖子前条件的一部分进行检查,则可以抛出IllegalArgumentExceptionRuntimeException
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无效的原因不能是一个指数超出界限。