1. 程式人生 > 其它 >Java 原始碼 - Optional 類

Java 原始碼 - Optional 類

介紹

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 值,採用鏈式程式設計的風格,可以幫助我們順著一口氣寫完程式碼邏輯,在途中無需進行進行一層層判斷是否為空。