1

我开发了一个框架,它允许其他人插入优化器的不同实现。这些优化器是异步运行的,我在异步代码中附加了在前后运行的监听器,以监控优化器的执行。例如:

public void async(Optimizer o){
   runListeners(o);
   o.run();
   runListeners(o);
}

我的问题是一些懒惰的程序员NullPointerExceptions在他们的代码中抛出了一些东西,并阻止该方法第二次执行侦听器。我想过抓住RuntimeException,但这对我来说感觉不对。

4

2 回答 2

1

任何时候你为插件创建一个框架来运行你都必须考虑如何处理插件抛出的异常,因为你通常不希望一个表现不佳的插件使你的整个程序崩溃。在这里捕获 Exception、RuntimeException 甚至 Throwable 没有任何问题(尽管错误可能仍然是中止的原因)。

于 2012-06-12T14:54:29.753 回答
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 :)
}
于 2012-06-12T14:54:12.940 回答