【问题标题】:Optional.ofNullable(i).ifPresent... vs if (i != null) [duplicate]Optional.ofNullable(i).ifPresent... 与 if (i != null) [重复]
【发布时间】:2017-07-06 05:49:53
【问题描述】:

我最近看到blog post (tweeted by @java) 表明以下代码变得越来越普遍:

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

代替:

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

在这种情况下使用 Optional 对我来说似乎很尴尬,甚至忽略了变量的命名 - 后者更容易阅读并且更适合用例(处理空值)。我相信这也能更好地捕捉语义——我可能来自不符合 Optional 试图捕捉的语义的代码(如 possible duplicatethis Oracle article 中所述)。

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

【问题讨论】:

标签: java optional


【解决方案1】:

相同的代码单元将一个可能为 null 的对象包装在 Optional 中只调用 ifPresent() 并没有多大意义。

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

【讨论】:

  • 是的,确实,这就是 Optional 的设计用途:作为返回值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 2012-09-02
相关资源
最近更新 更多