Java 8 如果 Optional 不存在,如何从方法中 return?

Java 8 How to return from a method if Optional is not present?

我的意思不是 return 一个可选值,我的意思是一个方法:

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中的ifPresentOrElse可以做到这一点,但是JAVA8有没有办法做到这一点?

我不需要这个方法 return 任何值,但是如果 Optional 不存在,我想记录一些东西。

如果在Optional为空的时候什么都不做,可以使用ifPresent:

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

似乎是 ifPresentOrElse 的用例,如 Java-9 :

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

只是抛出一个想法,在服务上有一个方法来检查对象是否存在怎么样? 我认为通常你不想将你的 Optionals 散布在你的代码中,我更愿意将它保留在服务中。

SomeService:

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

然后

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

这样您就不必在调用中处理 Optional,因为您并不真正关心它的值

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

使用Optional.ofNullable(input).orElseGet(this::methodName);

如果输入为空,则进入 orElseGet 逻辑。如果输入不为空,则 return 输入值。

请参阅 https://www.baeldung.com/java-optional

的第 'Difference Between orElse and orElseGet()' 部分