Java 效率提升系列之 Optional對象

Optional 類(java.util.Optional)

它是一個容器類,代表一個值存在或不存在,原來用 null 表示一個值不存在,現在 Optional 可以更好的表達這個概念。並且可以避免空指針異常。
在這裏插入圖片描述
常用方法:

  • Optional.of(T t) : 創建一個 Optional 實例。

  • Optional.empty() : 創建一個空的 Optional 實例。

  • Optional.ofNullable(T t):若 t 不爲 null,創建 Optional 實例,否則創建空實例。

  • isPresent() : 判斷是否包含值。

  • orElse(T t) : 如果調用對象包含值,返回該值,否則返回t。

  • orElseGet(Supplier s) :如果調用對象包含值,返回該值,否則返回 s 獲取的值。

  • map(Function f): 如果有值對其處理,並返回處理後的Optional,否則返回 Optional.empty()。

  • flatMap(Function mapper):與 map 類似,要求返回值必須是Optional。

下面引用ImportNew的一段內容來告訴我們如何正確使用Optional。比如千萬不要寫成這樣子

public static String getName(User u) {
    Optional<User> user = Optional.ofNullable(u);
    if (!user.isPresent())
        return "Unknown";
    return user.get().name;
}

這樣改寫非但不簡潔,而且其操作還是和第一段代碼一樣。無非就是用isPresent方法來替代u==null。這樣的改寫並不是Optional正確的用法,我們再來改寫一次。

public static String getName(User u) {
    return Optional.ofNullable(u)
                    .map(user->user.name)
                    .orElse("Unknown");
}

這樣纔是正確使用Optional的姿勢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章