簡體   English   中英

最佳實踐:使用Java 8可選或引發異常

[英]Best Practice: Using Java 8 Optional or throwing Exception

Java 8引入了Optional API來表示在運行時可能為null值。 在以下情況下,最好拋出一個已檢查的異常或返回一個Optional返回類型來表示邊緣情況?

情況1:返回類型Optional

private Optional<Item> getItem(String itemName)
{
    for (Item item : items)
    {
        if (item.getName().equals(itemName))
            return Optional.of(item);
    }

    return Optional.empty();
}

情況2:引發檢查異常

  private Item getItem(String itemName) throws ItemNotFound
   {
        for (Item item : items)
        {
            if (item.getName().equals(itemName))
                return item;
        }

        throw new ItemNotFound();
   }

正如Martin Fowler所倡導的那樣, Optional /特殊情況下的模式是一種更好的做法,但是在這種簡單的情況下,拋出一個已檢查的異常也可以做到。

我應該關注哪一個?

基本上可以歸結為:缺少該用例是否有意義?

可以說一個應用有用戶。 用戶可以將電話號碼添加到他的帳戶信息中。 由於他的俯卧位號碼不必存在,因此可以使用可選的。 電話號碼可能在那里,但可能丟失。 客戶端代碼必須處理Optional / nullable值。

另一方面,如果我想查看他的電子郵件,則在注冊時必須填寫。 然后例外就是要走的路。 電子郵件必須在那里,但不是。 此處,客戶端代碼面臨無效的應用程序狀態/損壞的用戶。

這很簡單:

  • 如果null為錯誤條件,則引發異常。
  • 如果null為有效的返回值,則返回空的Optional。

暫無
暫無

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

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