java - 空 `Optional` 类型的返回值应该是什么?
问题描述
我有一个方法链,其中一个方法的Optional
返回类型如下
public Optional<Employee> find(long id) {
for (Employee employee : this.employees) {
if (employee.getId() == id) {
return Optional.of(employee);
}
}
return Optional.empty();
}
public Employee findlById(long id) {
return find(id);
}
这里第二种方法findById
会有编译错误,因为它自己的返回类型和find
方法的返回类型不同。
现在,如果我检查该值并找到它,我可以返回该对象。Optional
但是如果对象为空,我应该返回什么?
public Employee findlById(long id) {
Optional<Employee> employee = find(id);
if (employee.isPresent()) {
return employee.get();
}
return // what??;
}
从我读过的互联网上的资源来看,你永远不应该返回null
一个Optional
对象。所以我很困惑,如果null
不是what
?
解决方案
如果您要返回一个Optional
类型,那么您可以使用Optional.empty()
like
return Optional<Employee>.empty();
但是由于您的返回类型是Employee
您的选择,因此您可以选择将返回类型更改为Optional<Employee>
并使用上述内容,return null;
或者抛出某种Exception
.
推荐阅读
- wordpress - Jetpack 9.2 升级后生成 Calypsoify 错误
- javascript - 响应式复选框将标签与新行对齐
- javascript - 从子级调用函数以更改父级的状态时出错
- python - 将变量传递给 DRF 中的权限类会出错
- html - 谷歌表格 - 用不同的值填充多行
- flutter - I/flutter (4037): 方法 '[]' 在 null 上被调用
- etl - Pentaho 的 Kettle 服务器 OutOfMemory 错误
- arrays - 如何在 http 请求中发送具有不同 json 对象的 json 数组
- javascript - 文本输入确实检查休假字段不起作用,而其他字段起作用。为什么
- openlayers - 如何更改圆圈的样式以在其中包含类似大小的图标?