想咨询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 允许你在没有任何错误/警告的情况下复制这样的 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
阿波罗的战车
相关分类