【发布时间】:2017-04-23 15:30:14
【问题描述】:
我找不到使用 Java 的 Optional 执行以下操作的方法:
if (SOME_OBJECT != null) {
doSomething(SOME_OBJECT);
} else {
doSomethingElse();
}
使用Optional 并不是指用Optional.ofNullable(SOME_OBJECT).isPresent() 替换SOME_OBJECT == null,这比简单地检查是否为空要长得多。
我的期望是这样的:
Optional.ofNullable(SOME_OBJECT)
.ifPresent(this::doSomething)
.orElse(this::doSomethingElse);
我找不到像我刚刚写的那样的 API。它存在吗?如果是这样,它是什么?如果不是,为什么不呢? :)
第二段代码看起来像一个反模式:(为什么?也许 Java 的架构师故意阻止了这种语法......
【问题讨论】:
-
令人惊讶的是
ifPresent没有返回Optional,而且似乎没有ifAbsent。 -
我认为第二段代码可能是反模式,因为它进行了三个方法调用,并且似乎还进行了更多检查(
ifPresent和orElse必须重新检查结果来自ofNullable。它似乎至少和 if-then 一样复杂,而且难以维护。所有缺点(即使很小),没有优点。 -
@markspace:我倾向于对
Optional整体有这种感觉。 :-) 但是我没有在愤怒中使用它(我已经好几年没有做过任何严肃的 Java 了),所以我认为这是反动和无知的...... :-) -
@T.J.Crowder 我认为
Optional是作为流实现的一部分引入的。它在流的底层使用以防止NullPointerExceptions。从这个角度来看,我认为这是有道理的——作为一个更大的内聚框架的一部分。随机使用Optional可能不会对其设计或实现产生凝聚力的影响,您需要一些充分的理由来使用这些类型的对象。 -
如果您已经有一个包含 null 的变量,请保留您的 if 并感到高兴。对于单个条件,将其包装到 Optional 中没有任何好处。
标签: java java-8 optional nullable