这是我的代码:
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;
可以使用一个退出点吗?
答案 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