相关疑难解决方法(0)

为什么在Optional.ofNullable上使用Optional.of?

使用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 null nullpointerexception optional java-8

206
推荐指数
3
解决办法
10万
查看次数

是否有使用Optional.of()的真正原因?

我在这里读到为什么Optional.of()要使用它Optional.ofNullable(),但答案根本不能满足我,所以我要求略有不同:

如果您确定您的方法没有返回null,为什么要使用它Optional?据我所知,它或多或少的唯一目的是提醒"方法的用户",他可能不得不处理 - 值null.如果他不必处理价值,null他为什么要被一个人打扰Optional呢?

我问,因为我最近使我的服务层返回Optionals而不是nulls(在某些情况下).当我Optional.of()抛出NullPointer时,我使用并且非常困惑.

我做的一个样本:

Optional valueFromDB = getUserById("12");
User user = valueFromDB.get(); 

.....

public Optional<User> getUserById(String id) {
  //...
  return Optional.of(userRepository.findOne(id)); // NullPointerException!
}
Run Code Online (Sandbox Code Playgroud)

如果无法使用null,我不明白为什么会把它包装成一个Optional.链接答案中的家伙说:"好吧,如果NullPointer发生,它会马上发生!" 但我真的想要吗?如果一个人的唯一目的Optional是提醒那些得到这样一个对象的程序员,请null记住(他有必要打开它),为什么我想要NullPointerException在包装时?


编辑:我需要编辑问题,因为它被标记为重复,即使我已经从一开始就链接了所述问题.我也解释过,为什么答案不能让我满意,但现在我需要用一个解释来编辑我的文字.但是这里有一些我想问的附录,因为我得到了5个答案,每个人都回答了不同的案例,但没有一个完全覆盖我在这里要求的内容:

有没有理由,Optional.of(null)是不可能的,他们专门为null case添加了Optional.ofNullable()?

使用流不应该是我对实现的想法的问题.我从你的答案中得到了很多见解,谢谢你.但到目前为止,真正的问题还没有得到解答,据我所知/读/理解.也许我应该问:"如果我们删除该Optional.of()方法并且仅允许Optional.ofNullable()在Java 9中,除了向后兼容性之外会有什么问题吗?"

java nullpointerexception optional java-8

10
推荐指数
3
解决办法
4855
查看次数

标签 统计

java ×2

java-8 ×2

nullpointerexception ×2

optional ×2

null ×1