代码之家  ›  专栏  ›  技术社区  ›  git-flo

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

  •  1
  • git-flo  · 技术社区  · 7 年前

    .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 回复  |  直到 7 年前
        1
  •  3
  •   akourt    7 年前

    检查optional是否为null本质上是错误的。

    通过引入空的概念,为消除空检查的需要而创建的可选项。

    本质上,可选的是一个值的包装器,它可以有两种状态。要么有值,要么是空的。这是通过使用 Optional#isPresent . 您可以在相关文档中查看更多信息 here .

    其基本功能如下:

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

    一个很好实现的方法(如您上面提到的)要么返回一个带值的optional,要么返回一个空optional(如文档中提到的)。

    Optionals提供了大量的方法,您可以在不需要空检查的情况下操作它们。

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

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

        2
  •  2
  •   Andy Turner    7 年前

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

    Optional.empty ;它不会返回 null

        3
  •  1
  •   Pankaj Singhal    7 年前

    Optional 创建要删除的 null 检查该字段并在该字段上执行操作,而不考虑该字段为空。

    你可以和我核对一下 Optional.isPresent() 是否包含任何值。

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