为什么Java的Optional.of()不接受空值?然后,它不再是真正的“可选”值

时间:2019-04-22 18:51:15

标签: java java-8 optional

我知道如果该值也可以为null,则我们有Optional.ofNullable()。我的问题是,为什么Optional.of()的默认行为也没有?如果值不能为null,那么为什么要首先放在Optional中呢?如果结果还是为空,那么无论如何您都会得到一个NPE。如果您使用Optional方法构造一个of(),您将仍然拥有Optional包装器的所有其他方法,只有值可以为null时,它们才真正有用途。

编辑:在发布此内容之前,我已经阅读过Why use Optional.of over Optional.ofNullable?,但是答案是“因为您可以更快地发现错误,并且以这种方式进行追踪更容易”。但是我有点不同意,也许您的堆栈跟踪中会包含一些额外的行,但是仍然很容易查明NPE的来源。

2 个答案:

答案 0 :(得分:6)

该方法应用于非null参数! 该方法的 intent 是为了确保在使用null调用时它将失败!

这与程序员将意图传达给读者有关!

当您不知道输入的内容是什么,并且该输入可能为null时,可以使用其他方法将其告知读者。但是,当您知道“永远不会出现传入的null”时,如果违反了非常严格的合同,可能会抛出异常。

答案 1 :(得分:0)

不能为空。 Optional.ofNullable(null)返回一个Optional,其中isPresent为false,不是真实的,而是其中为null。