我需要创建一种按员工姓名查找员工的方法。有以下三种可能的解决方案来实现这一点:
- 员工 findEmployeeById(long empId) 抛出 NoSuchEmployeeCheckedException;
- 可选的 findEmployeeById(long empId);
- 员工 findEmployeeById(long empId) 抛出 NoSuchEmployeeUnCheckedException;
如果 id 在我的存储库中匹配,第一种方法将返回一个员工实例,否则抛出一个检查异常实例NoSuchEmployeeCheckedException
第二种方法将返回 java8 的 Optional 的实例,同时不会抛出异常。
最后一种方法与第一种方法类似,但抛出一个 UnCheck 异常实例NoSuchEmployeeUnCheckedException
而不是已检查异常。
我在 StackOverFlow 上阅读了多篇关于已检查与未检查异常的帖子。老实说,我仍然不太确定如何正确使用它们。
Joshua Bloch 在《Effective Java》中说
对可恢复条件使用检查异常,对编程错误使用运行时异常(第 2 版第 58 条)
- findEmployeeById 是可恢复的条件吗?
- 我需要使用 Optional 还是抛出异常?
- 哪种解决方案最好?