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

时间:2017-02-16 21:57:26

标签: java optional

我最近看到blog posttweeted by @java)表示以下代码变得越来越常见:

Optional.ofNullable(i).ifPresent(x -> doBlah(x));

而不是:

if (i != null) {
  doBlah(i);
}

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

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

1 个答案:

答案 0 :(得分:15)

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

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