为了账号安全,请及时绑定邮箱和手机立即绑定

空的“Optional”类型的返回值应该是什么?

空的“Optional”类型的返回值应该是什么?

慕桂英4014372 2021-06-30 13:15:58
我有一系列方法,其中一个方法具有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?
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

如果您要返回一个Optional类型,那么您可以使用Optional.empty()like

return Optional<Employee>.empty();

但是由于您的返回类型是Employee您的选择,因此将返回类型更改为Optional<Employee>并使用上述内容,return null; 或者抛出某种Exception.


查看完整回答
反对 回复 2021-07-07
?
SMILET

TA贡献1796条经验 获得超4个赞

取决于方法的契约。假设 ID 来自用户输入 - 您很可能没有拥有该 ID 的员工。预计您会在程序中处理错误。由于对控制流使用异常通常是一种不好的做法 - 返回 anOptional<Employee>null

如果您希望该 ID 存在一个 Employee - 可能是该 ID 是从您从程序的另一部分收到的列表中传递过来的 - 抛出 anException是首选。(在这种情况下,我建议为该函数使用不同的名称 - 类似于getEmployeeDetails.

最后,你如何处理完全取决于您的要求-我怀疑是否有一个良好的单一的解决方案。


查看完整回答
反对 回复 2021-07-07
  • 3 回答
  • 0 关注
  • 310 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信