我有一个可选的方法返回Cat
对象(这是一个可选的).从我称之为It的地方,我想以某种方式处理它if cat is present then return otherwise continue
Opitional<Cat> option = isCatFound();
if (option.isPresent()) {
return option.get();
}
//DO STUFF HERE IF NO CAT FOUND
Run Code Online (Sandbox Code Playgroud)
上面的代码就是我现在拥有的代码.我喜欢使用比这更好的东西,单线解决方案.
有可能吗?或者正确使用可选方式?
由于您的方法必须在最后返回该类型的值,您可以使用
Optional<Cat> option = isCatFound();
return option.orElseGet(() -> {
// DO STUFF HERE IF NO CAT FOUND
// WHICH WILL EVENTUALLY RETURN A VALUE
};
Run Code Online (Sandbox Code Playgroud)
如果您的"找不到猫的东西"适合单行,那么它可能是一种选择.否则,我认为原始代码没有任何优势.特别是因为它的缺点是替代代码路径不能再抛出已检查的异常.
本Optional
类提供了一个方法,正是出于这个目的:orElseGet(Supplier)
.所以,使用一些小助手方法,您可以这样做:
Optional<Cat> option = isCatFound();
return option.orElseGet(this::noCatFound);
private Cat noCatFound() {
// do whatever is appropriate here
return null;
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以将辅助方法的主体移动到为该方法提供的lambda exprssion中orElseGet
.
归档时间: |
|
查看次数: |
2421 次 |
最近记录: |