我需要创建一个方法来按员工姓名查找员工。有三种可能的解决方案来执行此操作,如下所示:返回java.util.Optional或抛出(Checked/Unchecked)异常
- 员工findEmployeeById(long empId)抛出NoSuchEmployeeCheckedException;
- 可选findEmployeeById(long empId);
- 员工findEmployeeById(long empId)抛出NoSuchEmployeeUnCheckedException;
如果ID在我的仓库匹配的第一个方法将返回Employee的一个实例,否则抛出检查异常NoSuchEmployeeCheckedException
第二种方法将返回java8的可选实例的实例,而没有异常抛出。
最后一种方法与第一种方法类似,但抛出UnCheck异常的实例NoSuchEmployeeUnCheckedException
而不是检查异常。
我已经阅读了StackOverFlow关于检查与未检查的异常的多个帖子。我仍然不确定如何正确使用它们。
约书亚布洛赫在“有效的Java”说,
使用检查可恢复条件和运行时异常的编程错误(第58项中的第2版)
- 是在findEmployeeById可恢复条件异常?
- 我需要使用Optional还是抛出异常?
- 哪个解决方案最好?
以上都不是,返回Employee列表。该查询可以返回多行,因为多个员工可以具有相同的名称。如果没有匹配返回空列表 –
不需要考虑实际的逻辑 –