相当于Java 8的
if ( indicator != null ){
return getTest(a,indicator);
else{
return getTest(a);
}
如果indicator
要成为Optional
而不是可以为空?
答案 0 :(得分:2)
您可以写:
Java
Optional<Boolean> indicator = ...;
return indicator.map(i -> getTest(a, i)).orElseGet(() -> getTest(a));
但Optional
并不总是比简单的null
好。
答案 1 :(得分:2)
可能令人发指的答案,但Java 8版本:
if (indicator != null){
return getTest(a,indicator);
}
else{
return getTest(a);
}
是同一件事:
if (indicator != null){
return getTest(a,indicator);
}
else{
return getTest(a);
}
实际上,我可能会使用更简洁的方式:
if (indicator != null){
return getTest(a,indicator);
}
return getTest(a);
在您的情况下,将Optional
与“链接”方法结合使用,例如:
return indicator.map(i -> getTest(a, i)).orElseGet(() -> getTest(a));
隐藏了流程逻辑,而您的实际代码却完美地表明了这一点:您有两种不同的情况。通常,您希望链接处理/转换,但由于这些场景是不同的场景,因此不想链接分支场景。
如果您想使用Optional
来传达这个对象可能是null
的事实,这是完全合法的,那么我可能会做一些模仿if-else
的明确逻辑:>
Optional<Indicator> optIndicator = findIndicator();
if (indicator.isPresent()){
return getTest(a,indicator.get());
}
return getTest(a);
答案 2 :(得分:0)
您只需编写:
没有时间和空间。
Optional<Boolean> indicator = ...;
if(indicator.isPresent()) {
// value is present inside Optional
return getTest(a,indicator);
} else {
// value is absent
return getTest(a);
}
答案 3 :(得分:0)
您可以简单地编写它:
boolean indicator = ...;
return indicator ? getTest(a, i) : getTest(a);
或
Optional<Boolean> indicator = ...;
return indicator.orElse(false) ? getTest(a, i) : getTest(a);