簡體   English   中英

返回java.util.Optional或拋出(Checked / Unchecked)異常

[英]returning java.util.Optional or throw (Checked/Unchecked)exception

我需要創建一種通過員工姓名查找員工的方法。 可以通過以下三種方法實現此目的:

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

如果id在我的存儲庫中匹配,則第一種方法將返回employee的實例,否則拋出檢查異常的實例NoSuchEmployeeCheckedException

第二種方法將返回java8的Optional的實例,而不會引發異常。

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

我已經在StackOverFlow上閱讀了多個有關已檢查與未檢查異常的文章。 老實說,我仍然不確定如何正確使用它們。

約書亞·布洛赫(Joshua Bloch)在《有效的Java》中說

將檢查的異常用於可恢復的條件,將運行時異常用於編程錯誤(第二版中的項目58)

  1. findEmployeeById是否是可恢復的條件?
  2. 我需要使用Optional還是引發異常?
  3. 哪個解決方案最好?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM