我应该在 EventDispatcher/Observable 中捕获 Exception、Throwable 还是其他

Should I catch Exception, Throwable or other in EventDispatcher/Observable

通常 not recommended 捕获一般异常,如 ExceptionThrowable,因为你承担了处理你不知道如何处理的问题的负担(比如内存不足错误)。但是,在 "robust" 观察者模式实现中(一个监听器的错误不应阻止其他监听器被通知),事件发布者可能会被 任何人 观察到,这意味着事件监听器可能会抛出事件发布者不可能知道的异常(这就是解耦监听器和发布者的全部意义)。

在这种情况下,捕获Throwable是否有意义,这样无论事件处理中发生什么错误,其他侦听器仍会得到通知?或者抓住这样一个通用的 class 仍然是个坏主意吗?

像这样

for (EventHandler listener : listeners) {
     try {
        listener.sendEvent(event);
     } catch (Throwable exc) {
        log.warn("Listener " + listener + " failed to process event");
        //maybe remove faulty listener...
     }

  }

我可以看到另一个更重要的隔离侦听器失败的方法是使用线程池,这样如果一个侦听器抛出异常,只有池中的线程会丢失,但其他侦听器的通知仍然会发生

我建议抓住 Throwable,因为我发现你的论点是确凿的 “任何人都可以观察到事件发布者,这意味着事件监听器可能会抛出事件发布者不可能知道的异常”.

备选方案是不捕获任何东西,这将是一场噩梦,或者您建议的线程池,我认为当您捕获 Throwable.

时,线程池是不必要的