有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java异常抛出用法

要求用户从某个给定集合中选择一个ID。我检查该ID是否存在于我的集合中,如果不存在,我抛出IndexOutOfBoundsException,然后捕获它。我真的可以使用这个例外来达到这样的目的吗?还是这只是一个非常糟糕的做法


共 (5) 个答案

  1. # 1 楼答案

    如果将ID作为参数传递给一个方法,并且您希望将其作为前置后置条件的一部分进行检查,则可以抛出IllegalArgumentExceptionRuntimeException
    IndexOutOfBounds没有意义,因为这里很混乱。这是在执行越界访问时引发的异常

  2. # 2 楼答案

    如果你面临非常特殊的情况,抛出异常确实是有意义的

    如果类的契约假设用户永远不会查询不在集合中的值,那么异常是好的。也许是IllegalArgumentException之类的

    否则,它会导致样板代码,有时还会由于堆栈展开和异常传播而导致性能显著降低

    所以,抛出异常还是返回一些预定义值是一种折衷

    我建议在你的情况下返回“null”

  3. # 3 楼答案

    如果调用对23有效,而调用对47有效,同时没有任何变化,那么它对35无效的原因不可能是索引超出了范围

  4. # 4 楼答案

    取决于上下文,但在我看来,如果你在查找一个ID,一个与位置引用无关的概念,这将是对特定异常的滥用——可能是特定于应用程序的ItemNotFound或等效项

    如果API有一个约定,指定返回有效对象或抛出异常,然后抛出异常。如果有意义的话,也要考虑一个nulLoopDip模式。

  5. # 5 楼答案

    就我个人而言,我会抛出一个checked异常,这样调用方法就必须捕获它。你能做的就是打电话

    initCause
    

    并将其设置为IllegalArgumentException

    比如

    public method(int i) throws MyException {
        if (i < 0) {
           MyException e = new MyException();
           e.initCause(new IllegalArugmentException());
           throw e;
        }
    }
    

    我可能还会调用正确的corecotor,以便在抛出异常时向它传递消息,很明显发生了什么