我有一系列方法,其中一个方法具有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
.
SMILET
TA贡献1796条经验 获得超4个赞
取决于方法的契约。假设 ID 来自用户输入 - 您很可能没有拥有该 ID 的员工。预计您会在程序中处理错误。由于对控制流使用异常通常是一种不好的做法 - 返回 anOptional<Employee>
或null
。
如果您希望该 ID 存在一个 Employee - 可能是该 ID 是从您从程序的另一部分收到的列表中传递过来的 - 抛出 anException
是首选。(在这种情况下,我建议为该函数使用不同的名称 - 类似于getEmployeeDetails
.
最后,你如何处理完全取决于您的要求-我怀疑是否有一个良好的和单一的解决方案。
添加回答
举报
0/150
提交
取消