1. 程式人生 > 其它 >空指標異常處理 Optional類

空指標異常處理 Optional類

技術標籤:JAVAjavaspring經驗分享

Optional各方法的作用

public static Optional of(T value)

獲取一個Java物件的Optional物件,如果value為null,會丟擲NullPointerException,不推薦使用

public static Optional ofNullable(T value)

與上一個of方法類似,不同之處在於如果value為空時,會返回一個空的Optional(物件裡的value為null)

public T get()

獲取Optional中的value, value為空時會丟擲NoSuchElementException

public boolean isPresent()

判斷Optional中的value存在,不為null時返回true;為null時返回false

public void ifPresent(Consumer<? super T> consumer)

如果Optional中的value存在,不為null時, 則對value傳入consumer.accept()進行處理;否則什麼也不做

public Optional filter(Predicate<? super T> predicate)

過濾操作,如果Optional中的value不為null,則根據條件過濾;否則什麼也不做

public Optional map(Function<? super T, ? extends U> mapper)

轉化操作,如果Optional中的value不為null,則進行轉化;否則什麼也不做

public Optional flatMap(Function<? super T, Optional> mapper)

轉化操作,如果Optional中的value不為null,則進行轉化;否則什麼也不做, 與map的不同之處在於,map的返回值Optional物件是在map方法裡面自動封裝好了。而flatMap方法需要在自己的實現邏輯中封裝成Optional

public T orElse(T other)

//Optional中的value不為null, 返回value;否則返回傳入的other
public T orElse(T other) {
  return value != null ? value : other;
}

public T orElseGet(Supplier<? extends T> other)

//Optional中的value不為null, 返回value;否則返回傳入的other的value
public T orElseGet(Supplier<? extends T> other) {
     return value != null ? value : other.get();
}

public T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X

//Optional中的value不為null, 返回value;否則返回丟擲傳入的異常
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
    if (value != null) {
        return value;
    } else {
        throw exceptionSupplier.get();
    }
}

使用方法