JAVA Optional總結

Optional在JAVA中被定義爲一個容器類,更確切的說只存一個元素的容器。java

  1. container object which may or may not contain a non-null value.

Optional類結構

Optional屬性

Optional類中包含兩個屬性:app

  • 類屬性:EMPTY
  • 對象屬性:value

EMPTY屬性用來存放一個value爲null的Optional對象。
value屬性用來存放非null對象。函數

Optional方法

Optional的有兩個構造方法,都被private修飾。ui

private Optional() {
    this.value = null;
}

private Optional(T value) {
    this.value = Objects.requireNonNull(value);
}

無參構造方法用來初始化EMPTY。有參構造方法用來初始化非null對象。this

由於構造方法被修飾爲私有的,Optional想要實例化對象只能經過類方法調用。Optional提供三個類方法。編碼

  • empty:返回value爲null的Optional對象
  • of:返回value非null的Optional對象
  • ofNullable:value的值根據參數是否爲null返回對應的Optional對象
public static<T> Optional<T> empty() {
    Optional<T> t = (Optional<T>) EMPTY;
    return t;
}

public static <T> Optional<T> of(T value) {
    return new Optional<>(value);
}

public static <T> Optional<T> ofNullable(T value) {
    return value == null ? empty() : of(value);
}

實例方法介紹spa

方法 參數類型 返回類型 說明
get T value爲null拋出NoSuchElementException異常
isPresent boolean value爲null則返回false
ifPresent Consumer<? super T> void 若是Optional實例有值則爲其調用consumer,不然不作處理
filter Predicate<? super T> Optional<T> 若是值存在而且知足提供的謂詞,就返回包括該值的Optional對象;不然返回一個空的Optional對象
map Function<? super T, ? extends U> Optional<U> 若是值存在,就對該值執行提供的mapping函數調用,返回Optional<U>對象
flatMap Function<? super T, Optional<U>> Optional<U> 若是值存在,就對該值執行提供的mapping函數調用,返回非null Optional對象
orElse T T 若是有值則將其返回,不然返回一個默認值
orElseGet Supplier<? extends T> T 若是有值則將其返回,不然返回一個由指定的Supplier接口生成的值
orElseThrow Supplier<? extends X> <X extends Throwable> 若是有值則將其返回,不然拋出一個由指定的Supplier接口生成的異常

總結

Optional類爲咱們作了什麼呢?code

  1. 代碼中能夠省去了ifelse對null對象的判斷。
  2. 提升編碼人員對null對象重視以及null對象時的特殊處理。
  3. 我的以爲Optional沒有實質性杜絕NPE問題,形成NullPointerException的主要緣由是數據不完整性。
相關文章
相關標籤/搜索