在使用Java8 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
,并始终保持安全呢?
发布于 2015-07-29 17:35:02
你的问题是基于这样的假设,即可能抛出NullPointerException
的代码比可能不抛出的代码更糟糕。这个假设是错误的。如果由于程序逻辑的原因,您希望您的foobar
永远不会为空,那么最好使用Optional.of(foobar)
,因为您将看到一个NullPointerException
,它将指示您的程序有一个bug。如果您使用Optional.ofNullable(foobar)
,而由于错误而foobar
恰好是null
,那么您的程序将默默地继续不正确地工作,这可能是更大的灾难。这样一来,错误可能会出现得晚很多,并且很难理解错误发生在哪一点。
发布于 2019-07-24 15:21:00
这取决于场景。
假设您有一些业务功能,并且需要进一步处理具有该值的内容,但在处理时使用null
值会对其产生影响。
然后,在这种情况下,您可以使用Optional<?>
。
String nullName = null;
String name = Optional.ofNullable(nullName)
.map(<doSomething>)
.orElse("Default value in case of null");
发布于 2018-09-11 18:58:07
Optional应该主要用于服务的结果。在该服务中,您知道手头有什么,如果有结果,则返回Optional.of( someValue ),如果没有,则返回Optional.empty()。在这种情况下,someValue永远不应该为null,并且仍然返回可选的。
https://stackoverflow.com/questions/31696485
复制相似问题