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

时间:2017-09-05 14:39:28

标签: java exception final

这是我的代码:

    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;

可以使用一个退出点吗?

3 个答案:

答案 0 :(得分:8)

这可以通过像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();
}

...如果是这种情况,您可能希望更喜欢不依赖第三方库的Joop's answer with multiple return statements after all

答案 1 :(得分:2)

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

在语义上实际上是一种“终于。”

答案 2 :(得分:0)

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;
}

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