【发布时间】:2019-05-17 12:20:53
【问题描述】:
我有一个关于 Java 8 的 Optional 的问题,其目的是解决 NullPointerException 异常。
问题是,让我们选择两种类型的原因是什么:
Optional.of(T value) <-----non-null value, null value will throw NPE
Optional.ofNullable(T value) <----- nullable value
因为我期望的是,当我使用时:
Optional.of(nullValue);
它不会抛出NullPointerException。
在一些回复后扩展了我的问题:
为什么人们会选择 Optional 而不是普通的 if-else 进行空值检查?
【问题讨论】:
-
您可能希望返回一个用 Optional 包装的值。在这种情况下,您可以使用
Optional.of(value);。 -
人们提供的三个答案中有两个称为 NullPointer。这个问题有多合适....
-
因为正如其他人在回答中所说,
Optional旨在减少 方法调用者 级别的 NPE,不一定是 方法实现 级别。Optional.of用于当一个 知道 值 不是null(如果是,则应抛出错误),Optional.empty用于当一个 知道值是null,Optional.ofNullable用于当一个人不确定值是否为null时。跨度> -
对我来说最大的问题是为什么选择这样命名。我会将
.of()用于可空值,然后将ofNotNull()用于非空值,因为后者使用较少。 -
@JollyJoker 在(
Optional返回)方法的逻辑认为结果已找到但不是或不应该是null的情况下。一个示例是通过返回Optional.of(matchedItem)找到匹配项时“短路”循环。如果未找到匹配项,则循环将完成并且该方法将返回Optional.empty。但是,在某些情况下(可能更频繁,也可能不是),即使方法也无法知道结果是否为null,并且在返回时必须使用Optional.ofNullable。