java - ScriptEngineManager 特别谨慎的异常处理

标签 java exception try-catch scriptengine

我想咨询一下JDK代码异常处理,

ScriptEngineManager从第 120 行开始,ServiceConfigurationError 有未使用的辅助捕获,据我了解,不能抛出该捕获

   try {
        while (itr.hasNext()) {
            try {
                ScriptEngineFactory fact = (ScriptEngineFactory) itr.next();
                facList.add(fact);
            } catch (ServiceConfigurationError err) {
                System.err.println("ScriptEngineManager providers.next(): "
                             + err.getMessage());
                if (DEBUG) {
                    err.printStackTrace();
                }
                // one factory failed, but check other factories...
                continue;
            }
        }
    } catch (ServiceConfigurationError err) {
        System.err.println("ScriptEngineManager providers.hasNext(): "
                        + err.getMessage());

是否有必要进行第二次捕获的原因?看来它只影响 while (itr.hasNext()) ,它不会抛出任何异常

或者只是过于谨慎地确保方法在任何情况下都不会抛出异常,如评论

// do not throw any exception here. 

实际上java允许你复制这样的try-catch而不会出现任何错误/警告:

 try {
     try {
            ScriptEngineFactory fact = itr.next();
            engineSpis.add(fact);
        } catch (ServiceConfigurationError err) {
            err.printStackTrace();
        }
    } catch (ServiceConfigurationError err) {
        err.printStackTrace();
    }

如果我在同一次尝试中连接捕获,我会收到编译错误

Unreachable catch block for ServiceConfigurationError. It is already handled by the catch block for ServiceConfigurationError

最佳答案

小误解:第二个 catch 不仅仅覆盖 while 循环。它还会处理从第一个 catch block 中抛出的此类异常。

但是你是对的:catch block 以及循环“ header ”不应该抛出这样的异常。简单地迭代迭代器需要以这种方式“保护”,这似乎很奇怪。

因此:也许这是该方法中存在其他代码时的剩余部分。或者是做得太过分了。或者最坏的情况是,我们看不到的代码(创建该迭代器)实际上可能会抛出此类错误。如上所述,至少可以说,这是一个奇怪且非常奇怪的设计。

关于java - ScriptEngineManager 特别谨慎的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313658/

相关文章:

java - 是的,没有进度对话

java - 为什么我在执行代码时会收到此 StringIndexOutOfBoundsException?

无法接受 Python 装饰器异常

C++ Try-Catch 语句未捕获异常

java - 在 JXTable 中隐藏一个列?

java - Jar 文件不适用于数据库(Hibernate)

Pythonic 使用属性和异常

java - Java中的while-try-catch

.net - 使用 try/catch 的优点和缺点

java - 使用循环的 Java 素数分解程序