基礎概念
- java8引入的,java9有增強
- Google公司出品
- 旨在更好的處理NullPointException
建立Optional實例和基礎使用
Optional op1 = Optional.ofNullable(entity); Optional op2 = Optional.of(entity); Optional op3 = Optional.empty();
三種建立方式,要求不能爲空、均可以、empty類型的;html
基本使用:java
op1.get(); //拿到其中的元素 op1.isPresent(); //判斷其中非空
既然是對付空指針的,就要有判空的能力。學習
其餘還有url
orElse() orElseGet() orElseThrow() filter() map() flatMap() ifPresent()
具體的參考下面博客連接吧,本身用用就熟悉了,況且從字面也能猜個7788spa
更加正確的使用方式
一句話:正確場景+鏈式調用.net
直白的講, 當咱們還在以以下幾種方式使用 Optional 時, 就得開始檢視本身了指針
- 調用 isPresent() 方法時
- 調用 get() 方法時
- Optional 類型做爲類/實例屬性時
- Optional 類型做爲方法參數時
給出逐漸變化的例子以下:code
public static String getName(User u) { if (u == null) return "Unknown"; return u.name; } public static String getName(User u) { Optional<User> user = Optional.ofNullable(u); if (!user.isPresent()) return "Unknown"; return user.get().name; } public static String getName(User u) { return Optional.ofNullable(u) .map(user->user.name) .orElse("Unknown"); }
因此,適用場景也比較明顯了,我以爲有兩種:htm
- 多個null判斷的,多層嵌套的;
- 單一null判斷的,迅速執行的;