ScriptEngineManager 格外谨慎的异常处理
ScriptEngineManager extra cautious exception handling
我想咨询 JDK 代码异常处理,
在第 120 行的 ScriptEngineManager 中,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 允许您在没有任何 error/warning:
的情况下复制这样的 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 块中抛出的此类异常。
但你是对的:那个 catch 块,以及循环 "header" 不应该抛出这样的异常。以这种方式简单地迭代迭代器需要 "protection" 似乎很奇怪。
因此:也许这是该方法中存在其他代码时的遗留问题。或者它是过度的。或者最坏的情况,我们看不到的代码(创建迭代器)实际上会抛出那种错误。如前所述,至少可以说,这将是一个奇怪且非常奇怪的设计。
我想咨询 JDK 代码异常处理,
在第 120 行的 ScriptEngineManager 中,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 允许您在没有任何 error/warning:
的情况下复制这样的 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 块中抛出的此类异常。
但你是对的:那个 catch 块,以及循环 "header" 不应该抛出这样的异常。以这种方式简单地迭代迭代器需要 "protection" 似乎很奇怪。
因此:也许这是该方法中存在其他代码时的遗留问题。或者它是过度的。或者最坏的情况,我们看不到的代码(创建迭代器)实际上会抛出那种错误。如前所述,至少可以说,这将是一个奇怪且非常奇怪的设计。