Java 8如果不存在Optional,如何从方法返回?

时间:2019-03-28 08:44:01

标签: java lambda optional

我的意思不是返回一个Optional值,我的意思是说一个方法:

public void someMethod() {
    Optional<Obj> obj = someService.getObj();
    if (obj.isPresent()) {
         ....
    } else {
       log.info(xxxx);
       return;
    }
    xxxxxxxxxxxxxxxxxx
    xxxxxxxxxxxxx
    other codes
}

是否可以使用Optional.ifPresent方式编写它?我的意思是,避免使用if isPresent。

非常感谢。

==更新:

似乎JDK9中的PresentOrElse可以做到这一点,但是JAVA8中有什么方法可以做到这一点?

我不需要此方法返回任何值,但是如果Optional不存在,我想记录一些内容。

3 个答案:

答案 0 :(得分:5)

就像Java-9中ifPresentOrElse的用例一样:

obj.ifPresentOrElse(a -> {...}, () -> {logger.info(xxxx);return; });

答案 1 :(得分:2)

如果在Optional为空时不执行任何操作,可以使用ifPresent

public void someMethod() {
    someService.getObj().ifPresent (v -> {
         ....
    });   
}

答案 2 :(得分:0)

只需提出一个想法,在服务上使用一种方法来检查对象是否存在呢? 我认为通常您不希望将Optionals扩展到整个代码中,我希望将其保留在服务中。

SomeService上:

public boolean isObjectPresent() {
    return getObj().isPresent();
}

然后

public void someMethod() {
    if (someService.isObjectPresent()) {
         ....
    } else {
       log.info(xxxx);
       return;
    }
}

这样,您不必真正关心它的价值,而不必在通话中处理Optional

注意:另外,我要补充一点,如果在if块之后没有代码,则不需要return语句。