繁体   English   中英

在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 SomeResult result;

一个出口点可以吗?

这可以通过像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的答案毕竟是多个return语句 ,而不依赖于第三方库。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM