【发布时间】:2017-08-08 23:57:58
【问题描述】:
我需要创建一个按员工姓名查找员工的方法。有以下三种可能的解决方案来实现这一点:
- 员工 findEmployeeById(long empId) 抛出 NoSuchEmployeeCheckedException;
- 可选的 findEmployeeById(long empId);
- 员工 findEmployeeById(long empId) 抛出 NoSuchEmployeeUnCheckedException;
如果 id 在我的存储库中匹配,第一种方法将返回一个员工实例,否则抛出一个检查异常实例NoSuchEmployeeCheckedException
第二种方法会返回一个java8的Optional实例,同时不会抛出异常。
最后一个方法和第一个类似,但是抛出一个UnCheck异常NoSuchEmployeeUnCheckedException的实例而不是checked异常。
我在 StackOverFlow 上阅读了多篇关于已检查与未检查异常的帖子。老实说,我仍然不太清楚如何正确使用它们。
《Effective Java》中的 Joshua Bloch 说过
对可恢复条件使用检查异常,对编程错误使用运行时异常(第 2 版中的第 58 条)
- findEmployeeById 是可恢复的条件吗?
- 我需要使用 Optional 还是抛出异常?
- 哪种解决方案最好?
【问题讨论】:
-
以上都不是,返回一个Employee列表。该查询可以返回多行,因为可以有多个员工具有相同的姓名。如果没有匹配项返回一个空列表
-
不需要考虑实际逻辑
标签: optional checked-exceptions unchecked-exception