返回 java.util.Optional 或 throw (Checked/Unchecked)异常



我需要创建一个按员工姓名查找员工的方法。有三种可能的解决方案来实现这一点,如下所示:

Employee
  1. findEmployeeById(long empId( 抛出 NoSuchEmployeeCheckedException;
  2. 可选 findEmployeeById(long empId(;
  3. Employee
  4. findEmployeeById(long empId( 抛出 NoSuchEmployeeUnCheckedException;

如果 id 在我的存储库中匹配,第一种方法将返回一个 employee 实例,否则抛出检查异常的实例NoSuchEmployeeCheckedException

第二种方法将返回java8的Optional实例,同时没有异常抛出。

最后一种方法与第一种方法类似,但抛出一个 UnCheck 异常的实例NoSuchEmployeeUnCheckedException而不是检查异常。

我已经在StackOverFlow上阅读了多篇关于检查与未检查异常的文章。老实说,我仍然不太确定如何正确使用它们。

约书亚·布洛赫(Joshua Bloch(在《有效的Java》中说:

对可恢复条件使用检查异常,对编程错误使用运行时异常(第 2 版第 58 项(

  1. findEmployeeById 是可恢复的条件吗?
  2. 我需要使用可选还是抛出异常?
  3. 哪种解决方案最好?

在特殊情况下使用例外,如果通常预期找不到员工,那么您可能不应该使用例外。
异常还具有一些运行时开销,因为它们需要捕获堆栈跟踪。
在这种情况下,我会使用Optional,或者如果多个员工可以具有相同的名称,则返回某种类型的Collection,如果未找到员工,则使用空集合。

相关内容

  • 没有找到相关文章

最新更新