我目前正在使用一些存储库函数,比如.findById()。现在,我想检查一下,是否返回了所请求的id的条目。我目前正在执行一个null-check来完成这个任务。
Optional<Entry> entryOptional = entryRepository.findById(id);
if (entryOptional != null) {
// do sth. ...
}.findById()文档中说,这个函数.
如果没有找到,则返回具有给定id或
Optional#empty()的实体
那么,我目前使用null-check的实现是否如预期的那样工作呢?还是我要检查一下:
if (!entryOptional.isEmpty()) {
// do sth. ...
}发布于 2018-09-03 10:52:39
检查可选选项是否为null本质上是错误的。
为否定空检查的需要而创建的选项,通过引入空值的概念。
从本质上说,可选对象是一个值的包装器,它可以有两个状态。有一个值或者是空的。这是通过使用Optional#isPresent完成的。您可以在相关文档这里上查看更多相关信息。
这样做的实质是:
public boolean isPresent() {
return value != null;
}一个实现得很好的方法(如上面提到的方法)将返回一个带有值的可选方法或一个空的可选方法(正如文档中提到的那样)。
选项提供了大量的方法,您可以操作它们,而不需要空洞检查。
例如,在代码中可以:
entryRepository.findById(id).ifPresent(() -> {
//some operation
});它基本上接受一个使用者并在可选值为非空的情况下执行它。
可供选择,您可以使用映射函数等。
我建议您仔细查看文档以了解更多信息。
发布于 2018-09-03 10:50:47
那么,我当前的空检查实现是否像预期的那样工作呢?
不是的。正如该方法所述,它返回实体或Optional.empty;它不返回null。
你的第二个版本是正确的。
发布于 2018-09-03 10:58:19
创建Optional是为了删除对该字段的null检查,并在该字段上执行操作,而不需要考虑它是否为null。
您可以在Optional.isPresent()的末尾检查它是否包含任何值。
所以是的,你的第二种方法是正确的。
https://stackoverflow.com/questions/52148147
复制相似问题