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 输入值。
的第 'Difference Between orElse and orElseGet()' 部分
我的意思不是 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 输入值。
的第 'Difference Between orElse and orElseGet()' 部分