Optional.ofNullable(i).ifPresent ... vs if(i!= null)

Jam*_*Fry 7 java optional

我最近看过一篇博客文章(由@java发布),表明以下代码变得越来越普遍:

Optional.ofNullable(i).ifPresent(x -> doBlah(x));
Run Code Online (Sandbox Code Playgroud)

代替:

if (i != null) {
  doBlah(i);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下使用Optional对我来说显得非常尴尬,甚至忽略了变量的命名 - 后者更容易阅读,更容易用于用例(处理空值).我相信这也可以更好地捕获语义 - 我可能来自不遵守Optional试图捕获的语义的代码(如可能的副本本Oracle文章中所述).

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

Kyl*_*los 17

对于相同的代码单元来说,将一个潜在的null对象包装在Optional中仅对其进行调用没有多大意义ifPresent().

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

  • 是的,的确,这是"可选"的设计方式:作为返回值. (5认同)