为什么使用 Optional.of 而不是 Optional.ofNullable?

新手上路,请多包涵

当使用 Java 8 Optional 类时,有两种方法可以将值包装在可选中。

 String foobar = <value or null>;
Optional.of(foobar);         // May throw NullPointerException
Optional.ofNullable(foobar); // Safe from NullPointerException

我知道 Optional.ofNullable 是使用 Optional 的唯一安全方法,但为什么 Optional.of 存在呢?为什么不直接使用 Optional.ofNullable 并始终保持安全?

原文由 whirlwin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 914
2 个回答

您的问题基于以下假设:可能抛出 NullPointerException 的代码比可能抛出的代码更糟糕。这个假设是错误的。如果您希望您的 foobar 由于程序逻辑而永远不会为 null,那么使用 Optional.of(foobar) 会更好,因为您将看到 NullPointerException 程序有错误。如果您使用 Optional.ofNullable(foobar)foobar 恰好是 null 由于错误,那么您的程序可能会错误地继续工作这样一来,错误可能会在很晚的时候发生,并且很难理解它是在哪一点出错的。

原文由 Tagir Valeev 发布,翻译遵循 CC BY-SA 3.0 许可协议

此外,如果您知道如果对象为空,您的代码将不起作用,您可以使用 Optional.orElseThrow 抛出异常

String nullName = null;

String name = Optional.ofNullable(nullName)
                      .orElseThrow(NullPointerException::new);
                   // .orElseThrow(CustomException::new);

原文由 Karan Arora 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题