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

标签 java java-8 nullpointerexception null option-type

使用 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 并始终保持安全?

最佳答案

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

关于java - 为什么使用 Optional.of 而不是 Optional.ofNullable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31696485/

相关文章:

java - 文件结束 NullPointerException

java - 测试文件是否存在但出现空指针异常

Java 文件上下文不为 null 会抛出 NullPointerException

java - ExecutorService、newFixedThreadPool 和 setPrioirty

java - Java中的高级泛型

java - 等待(长时间超时)和加入(长毫秒)之间的区别?

文本区域中的 JavaFX 多种颜色(JavaFX 8)

java - Oracle 和 Java 中 double 值的区别 (IEEE 754)

java - 带有模式 yyyyMMddhhmmss 的 SimpleDateFormat 无法解析日期 "20160327020727"

java - 了解用于定义 Spring Security bean 的 java 8 lambda 表达式