通常not recommended可以捕获Exception
或Throwable
等常规异常,因为您承担了处理您不知道如何处理的问题的负担(例如内存不足错误)。然而,在一个强大的"观察者模式实现(监听器的错误不应该阻止其他监听器被通知),任何人可能会观察到事件发布者,这意味着事件监听器可能抛出事件发布者的异常不可能知道(这就是将听众和出版商分离的全部意义)。
在这种情况下,捕获Throwable
是否有意义,以便无论事件处理中发生什么错误,其他监听器仍会收到通知?或者它仍然是坏的抓住这样一个通用类的想法?
像这样的东西
for (EventHandler listener : listeners) {
try {
listener.sendEvent(event);
} catch (Throwable exc) {
log.warn("Listener " + listener + " failed to process event");
//maybe remove faulty listener...
}
}
我可以看到隔离侦听器失败的另一个更重的替代方法是使用线程池,这样如果侦听器抛出异常,只会丢失池的线程,但仍会发生其他侦听器的通知
答案 0 :(得分:1)
我建议捕获Throwable
,因为我发现您的论点是确定“任何人都可能观察到事件发布者,这意味着事件监听器可能会抛出异常事件发布者不可能知道“。
备选方案没有捕获任何内容,这可能是一场噩梦,或者您对线程池的建议,当您抓住Throwable
时,我认为这是不必要的。