为了账号安全,请及时绑定邮箱和手机立即绑定

ScriptEngineManager 格外谨慎的异常处理

ScriptEngineManager 格外谨慎的异常处理

慕慕森 2022-12-15 11:06:06
想咨询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
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

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

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

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


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信