gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:37:28 25 4
gpt4 key购买 nike

我想咨询一下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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com