我开发了一个框架,允许其他人插入不同的优化器实现。这些优化器是异步运行的,我在异步代码内部和之后连接了侦听器,以监视优化器的执行。例如:
public void async(Optimizer o){
runListeners(o);
o.run();
runListeners(o);
}
我的问题是,一些懒惰的程序员在代码中抛出一些NullPointerExceptions
并阻止该方法第二次执行监听器。我想抓住RuntimeException
,但这对我来说是不对的。
答案 0 :(得分:1)
每当你为插件创建一个框架来运行时,你必须考虑如何处理插件抛出的异常,因为你通常不希望一个行为不当的插件来破坏你的整个程序。在这里捕获Exception,RuntimeException或者甚至可能是Throwable没有任何问题(尽管错误可能仍然是导致中止的原因)。
答案 1 :(得分:0)
runListeners(o);
try {
o.run();
} finally {
runListeners(o); // this will get run even if you get NPE
// now your program crashes with the NPE :)
}