0

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

  1. 员工 findEmployeeById(long empId) 抛出 NoSuchEmployeeCheckedException;
  2. 可选的 findEmployeeById(long empId);
  3. 员工 findEmployeeById(long empId) 抛出 NoSuchEmployeeUnCheckedException;

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

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

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

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

Joshua Bloch 在《Effective Java》中说

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

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

1 回答 1

0

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

于 2017-08-09T00:15:23.077 回答