在Java中使用try catch的最终实体

mkU*_*tra 3 java final exception

这是我的代码:

    SomeResult result = null;

    try {
        if(isOK) {
            result = service.getOK();
        }
    } catch (Exception e) {
        //logging
    }

    if(result == null) {
        result = service.getKO();
    }

    return result;
Run Code Online (Sandbox Code Playgroud)

我要让SomeResult结果最终是这样的:

final SomeResult result;
Run Code Online (Sandbox Code Playgroud)

一个出口点可以吗?

Luk*_*der 8

这可以通过像vavr这样的库来完成,它实现了Trymonad(即将try-catch语句转换为表达式):

public SomeResult getResult() {
    final SomeResult result;
    result = isOK ? Try.of(service::getOK).getOrElse(service::getKO) : service.getKO();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

但是,将值赋给局部变量的重点是什么?它与立即返回它是一样的:

public SomeResult getResult() {
    return isOK ? Try.of(service::getOK).getOrElse(service::getKO) : service.getKO();
}
Run Code Online (Sandbox Code Playgroud)

...在这种情况下,您可能希望Joop的答案return毕竟是多个语句,而不依赖于第三方库.