如何对空的Optional执行空检查
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对空的Optional执行空检查相关的知识,希望对你有一定的参考价值。
我目前正在使用一些存储库函数,比如.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. ...
}
检查可选项是否为null本质上是错误的。
通过引入空虚概念来创建可选项,以消除对空检查的需要。
本质上,一个可选的是一个值的包装器,它可以有两个状态。要么有价值要么是空的。这是通过使用Optional#isPresent
完成的。您可以在相关文档here上查看更多相关信息。
这基本上是由以下几点:
public boolean isPresent() {
return value != null;
}
一个很好实现的方法(如上所述)将返回带值的可选项或空的Optional(如文档中所述)。
Optionals提供了大量的方法,您可以操作它们而无需进行空白检查。
例如,在您的代码中,您可以:
entryRepository.findById(id).ifPresent(() -> {
//some operation
});
这基本上接受使用者并在可选的值不为null的情况下执行它。
另外你可以使用映射函数等。
我建议您仔细阅读文档以获取更多信息。
那么我当前的实现是否使用null检查按预期工作?
不是。就像方法所说,它返回实体,或Optional.empty
;它不会返回null
。
你的第二个版本是正确的。
创建Optional
s是为了删除该字段上的null
检查,并对该字段执行操作而不必将其置为空。
如果Optional.isPresent()
包含任何值,您可以在最后查看。
所以是的,你的第二种方法是正确的。
以上是关于如何对空的Optional执行空检查的主要内容,如果未能解决你的问题,请参考以下文章