gpt4 book ai didi

java - 如何使用 Vavr(以前称为 Javaslang)库捕获特定的运行时异常?

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

我试图捕获特定的运行时异常(因此不可抛出)并记录它(log.error 具有 void 返回类型)。在 vavr 中执行此操作的最简单方法是什么?

try {
sayHello();
} catch (MyAppRuntimeException ex) {
log.error("Error occured") // log.error returns void not Void so I couldn't find a suitable method in Vavr library
}

我已经尝试过

Try.run(() -> sayHello())
.recover(MyAppRuntimeException.class, ex->log.error("Error occured: {}", ex.getMessage()))

我得到:

Bad return type void cannot be converted to Void

如果 .recover 不是正确的方法,请建议我可以捕获一个特定异常但不能捕获 Throwable 的替代方法,因为它捕获所有异常和错误。

最佳答案

这很容易解释。您的方法 - 没有明确说明,但我认为基于错误消息返回 void。由于 recover 还必须返回一个值 - 进一步处理所需 - 与它包装的方法返回的类型兼容,因此它必须返回 Void,因此:

所以代码将是:

Try
.run(this::sayHello)
.recover(MyAppRuntimeException.class, e -> {
log.error("Error occured: {}", e.getMessage());
return null;
});

看看 docs .

编辑

经过评论讨论,发现恢复并不是所需要的。此函数用于提供恢复值,而不是记录语句,因此 onFailure + instanceof (而不是模式匹配)似乎可以完成这项工作:

Try
.run(this::sayHello)
.onFailure(throwable -> {
if (throwable instanceof MyAppRuntimeException) {
log.error("Error occured: {}", throwable.getMessage());
} else {
throw new RuntimeException(throwable);
}
})

关于java - 如何使用 Vavr(以前称为 Javaslang)库捕获特定的运行时异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46774799/

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