我目前正在使用某些存储库功能,例如.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. ...
}
答案 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
是否包含任何值。
是的,您的第二种方法是正确的。