使用Java 8 Optional类时,有两种方法可以将值包装在可选项中.
String foobar = <value or null>;
Optional.of(foobar); // May throw NullPointerException
Optional.ofNullable(foobar); // Safe from NullPointerException
Run Code Online (Sandbox Code Playgroud)
我理解Optional.ofNullable是唯一安全的使用方式Optional,但为什么Optional.of存在呢?为什么不Optional.ofNullable 随时使用并保持安全?
我有一个关于Java 8的Optional的问题,其目的是解决NullPointerException异常问题.
问题是,让两种类型让我们选择的原因是什么:
Optional.of(T value) <-----non-null value, null value will throw NPE
Optional.ofNullable(T value) <----- nullable value
Run Code Online (Sandbox Code Playgroud)
因为我的期望是,当我使用时:
Optional.of(nullValue);
Run Code Online (Sandbox Code Playgroud)
它不会抛出一个NullPointerException.
一些回复后扩大了我的问题:
为什么人们会选择Optional而不是普通if-else的null检查?
我知道Optional.ofNullable()值是否也可以为null。我的问题是,为什么还没有默认行为Optional.of()呢?如果值不能是null,为什么要放在Optional第一个?如果结果还是为空,那么无论如何您都会得到一个NPE。如果您Optional使用of()方法构造一个,那么您仍然会拥有Optional包装器的所有其他方法,只有在值可以为的情况下,它们才真正有目的null。
编辑:我已经阅读了为什么在Optional.ofNullable上使用Optional.of?在发布此消息之前,但答案是“因为您可以更快地发现错误,并且以这种方式进行跟踪更容易”。但是我有点不同意,也许您的堆栈跟踪中会包含一些额外的行,但是仍然很容易查明NPE的来源。