问题
使用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
由于该错误,那么你的程序将默默地继续正常工作,这可能是一个更大的灾难。这样一来,错误可能会在很晚之后发生,并且在理解它出错的时候会更加难以理解。