2017-09-05 31 views
3

尝试捕捉最后的实体这是我的代码:在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; 

有可能与一个×[出口点?

+0

对不起朋友,你的问题还不够明白。你可以尝试重写并解释你想要的吗?道歉,如果英语不是你的第一语言 –

+3

这听起来像一个XY问题,为什么你需要这个'final',请详细说明什么,为什么你不需要如何努力实现它。 – Jack

+0

如果你切换到Scala,你可以使用功能'Try'。尽管Java的“命令式尝试”并不具备这种能力,因为它完全是通过副作用来操作的。 – Carcigenicate

回答

8

这可能与像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,它不依赖于第三方库。

2

而不是分配到result,替换result =return。实际上删除result

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

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

+0

是的,我编译并运行它。这一行缺少,我已经添加为上述方法的第一行。 – muasif80

+0

那就是当你从方法中返回一个值时,你可以在定义变量时将它放入最终变量中。一旦定义,您可以重新定义该变量。 – muasif80

+0

这就是你需要根据你的需要对代码进行调整,但这是一个工作代码。让我分享另一个代码片段。因为我没有这个service.getOK和SomeResult,所以我可以编译这个确切的代码,但你可以从一个方法分配一个返回值到最终变量的工作解决方案的想法。 – muasif80