如何执行空检查是否为空可选

时间:2018-09-03 10:45:00

标签: java java-8 repository

我目前正在使用某些存储库功能,例如.findById()。现在,我想检查是否为请求的ID返回了条目。我目前正在通过执行null-检查来做到这一点。

Optional<Entry> entryOptional = entryRepository.findById(id);

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

.findById()文档说,该函数将...

  

返回具有给定id或Optional#empty()的实体   找不到

那么我目前使用null-check的实现是否按预期工作?还是我必须检查以下内容:

if (!entryOptional.isEmpty()) {
  // do sth. ...
}

3 个答案:

答案 0 :(得分:3)

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

通过引入空性的概念来创建可选项,以消除对空检查的需求。

从本质上讲,可选变量是值的包装器,它可以具有两个状态。有值或为空。这可以通过使用Optional#isPresent完成。您可以在相关文档here中查看更多信息。

这实际上是以下内容:

public boolean isPresent() {
    return value != null;
}

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

可选的选项提供了大量的方法,您可以对其进行操作,而无需进行空度检查。

例如,在您的代码中,您可以:

entryRepository.findById(id).ifPresent(() -> {
   //some operation
});

基本上接受哪个使用者并在可选值不为null的情况下执行该使用者。

或者您可以使用映射函数等。

我建议您仔细阅读文档。

答案 1 :(得分:2)

  

那么我目前使用null检查的实现是否按预期工作?

不。就像方法所说的,它返回实体,或__eq__;它不会返回def foobar(baz, qux): """ :type baz: Any object that implements __gt__ and __eq__ """ if baz >= qux: return 'nice!' return 'ouch!'

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

答案 2 :(得分:1)

创建

Code Folding来删除该字段上的Optional检查并对该字段进行操作,而不必关心它是否为null。

您可以在最后检查null是否包含任何值。

是的,您的第二种方法是正确的。