Java 中带有 try catch 的最终实体

final Entity with try catch in Java

这是我的代码:

    SomeResult result = null;

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

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

    return result;

我想使 SomeResult 结果 final 像这样:

final SomeResult result;

一个出口点可以吗?

不要分配给 result,而是将 result = 替换为 return。实际上删除 result.

语义上实际上是一种"finally."

final SomeResult result = getResult();
public SomeResult getResult(){
    SomeResult result = null;
    try {
        if(isOK) {
            result = service.getOK();
        }
    } catch (Exception e) {
        //logging
    }

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

    return result;
}

检查此 link 以查看使用方法调用分配的最终变量。 https://ideone.com/UAoBTn

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

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

但是,将值赋给局部变量有什么意义呢?与立即返回一样:

public SomeResult getResult() {
    return isOK ? Try.of(service::getOK).getOrElse(service::getKO) : service.getKO();
}

...在这种情况下,您可能更喜欢 ,它不依赖于第三方库。