Java Optional 与传统的缺失值处理有何不同?或者如何正确使用Java可选



在我看来,可选对代码流控制和缺失值处理几乎没有增加。如果找不到可选背后的值,仍然必须处理缺少该值的问题 - 那么有什么意义呢?

比较:

Optional someMissingVal = codeThatReturnsOptional.getOptionalValue().orElse(null);
if( someMissingVal == null){
throw(new NullPointerException());
} 
else return someMissingVal.get();

Type someMissingVal = codeThatReturnsType.getTypeValue();
if( someMissingVal == null){
throw(new NullPointerException());
} 
else return someMissingVal;

那么有什么大不了的,在上述场景中如何使用 Optional 来利用它的全部功能 - 而不是"旧式"缺失值处理?

您可以即时执行null检查,例如:

public static void main(String[] args) {
String s = null;
String newS = Optional.ofNullable(s).orElse("default");
}

以及抛出异常:

public static void main(String[] args) {
String s = null;
String newS = Optional.ofNullable(s).orElseThrow(IllegalArgumentException::new);
}

使用一些条件语句:

public static void main(String[] args) {
String s = "test";
Optional.ofNullable(s).ifPresent(System.out::print);
}

在更复杂的方案中与Streams一起使用。

您可以按如下方式简化第一个代码段

return codeThatReturnsOptional.getOptionalValue()
.orElseThrow(() -> new NullPointerException());

它现在简化了你的代码吗?它也使它具有可读性。

您可以使用可选做很多事情。甲骨文的这篇文章对此进行了解释。

相关内容