Java 原始碼 - Optional 類
阿新 • • 發佈:2022-04-15
介紹
A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value.
示例
public class Test { public static void main(String[] args) { String name = Optional.ofNullable("feigege").map(u -> u.toUpperCase()).orElse("為空"); System.out.println(name); // FEIGEGE } }
原始碼
成員變數
/**
* If non-null, the value; if null, indicates no value is present.
*/
private final T value;
/**
* Common instance for empty().
*/
private static final Optional<?> EMPTY = new Optional<>();
構造方法
/** * Constructs an instance with the value present. */ private Optional(T value) { this.value = Objects.requireNonNull(value); }
成員方法
/** * Returns an Optional describing the specified value, if non-null, * otherwise returns an empty Optional. */ public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); } /** * Returns an Optional with the specified present non-null value. */ public static <T> Optional<T> of(T value) { return new Optional<>(value); } /** * Returns an empty Optional instance. No value is present for this Optional. */ public static<T> Optional<T> empty() { @SuppressWarnings("unchecked") Optional<T> t = (Optional<T>) EMPTY; return t; } /** * Return true if there is a value present, otherwise false. */ public boolean isPresent() { return value != null; } /** * If a value is present in this Optional, returns the value, * otherwise throws NoSuchElementException. */ public T get() { if (value == null) { throw new NoSuchElementException("No value present"); } }
面試
Optional 類的好處?
使用 Optional 類可以優雅的處理 null 值,採用鏈式程式設計的風格,可以幫助我們順著一口氣寫完程式碼邏輯,在途中無需進行進行一層層判斷是否為空。