为什么在Optional.ofNullable上使用Optional.of?

问题

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

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

我理解Optional.ofNullable是使用Optional的唯一安全方式,但为什么Optional.of完全存在?为什么不使用Optional.ofNullable并始终保持安全?


#1 热门回答(184 赞)

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