如何对空的 Optional 执行 null 检查
How to performe a null-check for an empty Optional
我目前正在使用一些存储库函数,例如 .findById()
。现在我想检查是否为请求的 ID 返回了一个条目。我目前正在通过执行 null
-检查来做到这一点。
Optional<Entry> entryOptional = entryRepository.findById(id);
if (entryOptional != null) {
// do sth. ...
}
.findById()
文档说,该函数将...
return the entity with the given id or Optional#empty()
if
none found
那么我当前使用 null-check
的实现是否按预期工作?或者我是否必须检查类似的内容:
if (!entryOptional.isEmpty()) {
// do sth. ...
}
So is my current implementation with the null-check working as expected?
没有。正如方法所说,它 return 是实体,或 Optional.empty
;它不 return null
.
你的第二个版本是正确的。
检查可选项是否为 null 本质上是错误的。
创建可选项是为了通过引入空的概念来否定空检查的需要。
本质上,可选值是一个值的包装器,它可以有两个状态。要么有值,要么为空。这是通过使用 Optional#isPresent
完成的。您可以在相关文档 here.
上查看更多信息
它的主要作用如下:
public boolean isPresent() {
return value != null;
}
一个很好实现的方法(如你上面提到的那个)将 return 一个带有值的可选或一个空的可选(如文档中提到的)。
Optionals 提供了大量的方法,你可以在不需要空检查的情况下操作它们。
例如,在您的代码中您可以:
entryRepository.findById(id).ifPresent(() -> {
//some operation
});
它基本上接受消费者并在可选值不为 null 的情况下执行它。
您可以使用映射函数等替代方案
我建议你多看看文档。
创建 Optional
s 是为了删除对该字段的 null
检查并对该字段执行操作而不关心它是否为空。
你可以在最后用Optional.isPresent()
检查它是否包含任何值。
所以是的,你的第二种方法是正确的。
我目前正在使用一些存储库函数,例如 .findById()
。现在我想检查是否为请求的 ID 返回了一个条目。我目前正在通过执行 null
-检查来做到这一点。
Optional<Entry> entryOptional = entryRepository.findById(id);
if (entryOptional != null) {
// do sth. ...
}
.findById()
文档说,该函数将...
return the entity with the given id or
Optional#empty()
if none found
那么我当前使用 null-check
的实现是否按预期工作?或者我是否必须检查类似的内容:
if (!entryOptional.isEmpty()) {
// do sth. ...
}
So is my current implementation with the null-check working as expected?
没有。正如方法所说,它 return 是实体,或 Optional.empty
;它不 return null
.
你的第二个版本是正确的。
检查可选项是否为 null 本质上是错误的。
创建可选项是为了通过引入空的概念来否定空检查的需要。
本质上,可选值是一个值的包装器,它可以有两个状态。要么有值,要么为空。这是通过使用 Optional#isPresent
完成的。您可以在相关文档 here.
它的主要作用如下:
public boolean isPresent() {
return value != null;
}
一个很好实现的方法(如你上面提到的那个)将 return 一个带有值的可选或一个空的可选(如文档中提到的)。
Optionals 提供了大量的方法,你可以在不需要空检查的情况下操作它们。
例如,在您的代码中您可以:
entryRepository.findById(id).ifPresent(() -> {
//some operation
});
它基本上接受消费者并在可选值不为 null 的情况下执行它。
您可以使用映射函数等替代方案
我建议你多看看文档。
Optional
s 是为了删除对该字段的 null
检查并对该字段执行操作而不关心它是否为空。
你可以在最后用Optional.isPresent()
检查它是否包含任何值。
所以是的,你的第二种方法是正确的。