在Java
问题描述:
尝试捕捉最后的实体这是我的代码:在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
单子来完成(即转动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,它不依赖于第三方库。
答
而不是分配到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
对不起朋友,你的问题还不够明白。你可以尝试重写并解释你想要的吗?道歉,如果英语不是你的第一语言 –
这听起来像一个XY问题,为什么你需要这个'final',请详细说明什么,为什么你不需要如何努力实现它。 – Jack
如果你切换到Scala,你可以使用功能'Try'。尽管Java的“命令式尝试”并不具备这种能力,因为它完全是通过副作用来操作的。 – Carcigenicate