我需要创建一个按员工姓名查找员工的方法。有三种可能的解决方案可以实现如下:
如果id在我的存储库中匹配,第一种方法将返回employee的实例,否则抛出一个check exception NoSuchEmployeeCheckedException
的实例
第二种方法将返回java8的Optional实例,而没有抛出异常。
最后一个方法与第一个方法类似,但是抛出UnCheck异常NoSuchEmployeeUnCheckedException
的实例而不是检查异常。
我已经在StackOverFlow上阅读了有关已检查和未经检查的异常的多个帖子。老实说,我还是不太确定如何正确使用它们。
“有效Java”中的Joshua Bloch说对可恢复条件使用已检查的异常,对编程错误使用运行时异常(第2版中的第58项)
答案 0 :(得分:0)
在特殊情况下使用例外,如果通常不希望找到员工,那么您可能不应该使用例外。
由于需要捕获堆栈跟踪,异常也会产生一些运行时开销
在这种情况下,我会使用Optional
或者如果多个员工可以使用相同的名称,则返回某种类型的Collection
,如果没有找到员工则使用空集合。