Java 可选。不可用(i)。如果存在。。。vs if(i!=null)

Java 可选。不可用(i)。如果存在。。。vs if(i!=null),java,optional,Java,Optional,我最近看到一个()表明以下代码越来越常见: Optional.ofNullable(i).ifPresent(x -> doBlah(x)); 而不是: if (i != null) { doBlah(i); } 在这种情况下使用Optional对我来说似乎非常尴尬,甚至忽略了变量的命名——后者更容易阅读,并且对于用例来说更习惯(处理null)。我相信这也能更好地捕获语义——我可能来自不遵守Optional试图捕获的语义的代码(如和中所述) 我没有看到,但是有没有一个好的语义原因让

我最近看到一个()表明以下代码越来越常见:

Optional.ofNullable(i).ifPresent(x -> doBlah(x));
而不是:

if (i != null) {
  doBlah(i);
}
在这种情况下使用Optional对我来说似乎非常尴尬,甚至忽略了变量的命名——后者更容易阅读,并且对于用例来说更习惯(处理null)。我相信这也能更好地捕获语义——我可能来自不遵守Optional试图捕获的语义的代码(如和中所述)


我没有看到,但是有没有一个好的语义原因让我们更喜欢Optional.isNullable方法(忽略它可能对性能的影响,具体取决于它的使用方式)?

对于同一个代码单元来说,将一个可能为空的对象包装在Optional中,只对其调用
ifPresent()
,没有多大意义


更有用的情况是API可以返回null对象,而不是返回可选的。这将强制调用方以空安全的方式处理潜在的空结果。由于API和调用者是独立的代码单元,将对象包装成可选的并强制调用者调用
ifPresent()
的额外工作不仅是繁忙的工作,而且实际上强制执行了一个更安全的契约,以防空指针异常。

orElse(x->doBla(x))
是不正确的,除非
i
碰巧是一个lambda。是的,对于你引用的案例,我只会坚持一个好的
if
语句。但是您可以做一些事情:Optional不应该以这种方式使用。如果它变得越来越普遍,那么,如果你所有的朋友都从桥上跳下来……是的,事实上,这就是
Optional
被设计用来作为返回值的方式。