2017-08-08 123 views
0

我需要創建一個方法來按員工姓名查找員工。有三種可能的解決方案來執行此操作,如下所示:返回java.util.Optional或拋出(Checked/Unchecked)異常

  1. 員工findEmployeeById(long empId)拋出NoSuchEmployeeCheckedException;
  2. 可選findEmployeeById(long empId);
  3. 員工findEmployeeById(long empId)拋出NoSuchEmployeeUnCheckedException;

如果ID在我的倉庫匹配的第一個方法將返回Employee的一個實例,否則拋出檢查異常NoSuchEmployeeCheckedException

第二種方法將返回java8的可選實例的實例,而沒有異常拋出。

最後一種方法與第一種方法類似,但拋出UnCheck異常的實例NoSuchEmployeeUnCheckedException而不是檢查異常。

我已經閱讀了StackOverFlow關於檢查與未檢查的異常的多個帖子。我仍然不確定如何正確使用它們。

約書亞布洛赫在「有效的Java」說,

使用檢查可恢復條件和運行時異常的編程錯誤(第58項中的第2版)

  1. 是在findEmployeeById可恢復條件異常?
  2. 我需要使用Optional還是拋出異常?
  3. 哪個解決方案最好?
+0

以上都不是,返回Employee列表。該查詢可以返回多行,因爲多個員工可以具有相同的名稱。如果沒有匹配返回空列表 –

+0

不需要考慮實際的邏輯 –

回答

0

在特殊情況下使用例外情況,如果通常預計沒有員工被發現,那麼您可能不應使用例外情況。
異常還需要一些運行時開銷,因爲它們需要捕獲堆棧跟蹤。
在這種情況下,我將使用Optional或者多個員工可以使用相同名稱,返回某種類型的Collection,如果找不到員工,則使用空集合。