gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:02:27 25 4
gpt4 key购买 nike

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

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

像这样

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 时,这是不必要的。

关于java - 我应该在 EventDispatcher/Observable 中捕获 Exception、Throwable 还是其他,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30766717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com