为啥 FindById 返回 Optional? [复制]

Posted

技术标签:

【中文标题】为啥 FindById 返回 Optional? [复制]【英文标题】:Why FindById returns Optional? [duplicate]为什么 FindById 返回 Optional? [复制] 【发布时间】:2020-06-23 14:12:54 【问题描述】:

我目前在我的存储库接口中覆盖 findById 以返回一个普通对象,因为我不喜欢我必须做的不必要的代码:.isPresent().get()

ApplicationType findById(long applicationTypeId);

我只是检查if(applicationType != null)

有什么理由在这里实现 Optional 吗??

【问题讨论】:

因为在你辞掉工作并前往哥斯达黎加梦想之旅的一天后,一位初级开发人员会写信findById(applicationTypeId).getSomething() 你能说得更具体点吗?可能会显示更多源代码 Java 8 Optional: What's the Point? 搜索更多。 @OleV.V.,这篇文章是 Optional 用法的一个糟糕示例。 【参考方案1】:

Optional 从 JDK 8 开始在 JDK 中实现。

它谦虚地希望避免在代码中使用 null 检查(就像你实际上所做的那样)

Optional 在这里返回意味着我们可以有一个ApplicationType 值或null

当拥有Optional 时,您可以使用isPresent() 检查该值。 Optional的值可以用get()获取

Optional 很有趣,尤其是在使用 optinal 本身的函数直接执行操作时,单独使用 this :

Optional<ApplicationType> applicationType = repo.findById(1L);
applicationType.ifPresent(value -> doSomething(value));
applicationType.orElse(defaultApplicationType);

这里有一个完整的 guide 选项

【讨论】:

以上是关于为啥 FindById 返回 Optional? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法用 JOOQ 生成 DAO,findById 返回 Optional

如何对空的Optional执行空检查

为啥不能修改 Mongoose 查询返回的数据(例如:findById)

为啥“findById()”在同一实体上调用 getOne() 后返回代理?

springboot datajpa 简明说明

为啥 std::optional::value() &&;返回 &&?