首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对空可选项执行空检查

如何对空可选项执行空检查
EN

Stack Overflow用户
提问于 2018-09-03 10:44:59
回答 3查看 7.2K关注 0票数 1

我目前正在使用一些存储库函数,比如.findById()。现在,我想检查一下,是否返回了所请求的id的条目。我目前正在执行一个null-check来完成这个任务。

代码语言:javascript
复制
Optional<Entry> entryOptional = entryRepository.findById(id);

if (entryOptional != null) {
  // do sth. ...
}

.findById()文档中说,这个函数.

如果没有找到,则返回具有给定id或Optional#empty()的实体

那么,我目前使用null-check的实现是否如预期的那样工作呢?还是我要检查一下:

代码语言:javascript
复制
if (!entryOptional.isEmpty()) {
  // do sth. ...
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-03 10:52:39

检查可选选项是否为null本质上是错误的。

为否定空检查的需要而创建的选项,通过引入空值的概念。

从本质上说,可选对象是一个值的包装器,它可以有两个状态。有一个值或者是空的。这是通过使用Optional#isPresent完成的。您可以在相关文档这里上查看更多相关信息。

这样做的实质是:

代码语言:javascript
复制
public boolean isPresent() {
    return value != null;
}

一个实现得很好的方法(如上面提到的方法)将返回一个带有值的可选方法或一个空的可选方法(正如文档中提到的那样)。

选项提供了大量的方法,您可以操作它们,而不需要空洞检查。

例如,在代码中可以:

代码语言:javascript
复制
entryRepository.findById(id).ifPresent(() -> {
   //some operation
});

它基本上接受一个使用者并在可选值为非空的情况下执行它。

可供选择,您可以使用映射函数等。

我建议您仔细查看文档以了解更多信息。

票数 3
EN

Stack Overflow用户

发布于 2018-09-03 10:50:47

那么,我当前的空检查实现是否像预期的那样工作呢?

不是的。正如该方法所述,它返回实体或Optional.empty;它不返回null

你的第二个版本是正确的。

票数 2
EN

Stack Overflow用户

发布于 2018-09-03 10:58:19

创建Optional是为了删除对该字段的null检查,并在该字段上执行操作,而不需要考虑它是否为null。

您可以在Optional.isPresent()的末尾检查它是否包含任何值。

所以是的,你的第二种方法是正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52148147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档