国产精品免费嫩草研究院|无遮羞动漫在线观看AV|国产麻豆精品传媒AV国产在线|村在线观看|寂寞情人1正版|韩国床震韩国床震古|精品系列专区久久

Optional源碼解析與實踐

1 導讀NullPointerException在開發過程中經常遇到 , 稍有不慎小BUG就出現了 , 如果避免這個問題呢 , Optional就是專門解決這個問題的類 , 那么Optional如何使用呢?讓我們一起探索一下吧!
2 源碼解析2.1 Optional定義Optional類是Java8為了解決null值判斷問題而創建的容器類 , 在java.util 下,使用Optional類可以避免顯式的null值判斷 , 避免null導致的NullPointerException 。首先 , Optional是一個容器 , 它可以保存類型T的值 , 也可以為null的容器對象 。Optional容器只能存一個值 。
2.2 Optional的屬性1)源碼:

  1. /**
  2. * Common instance for {@code empty()}.
  3. */
  4. private static final Optional<?> EMPTY = new Optional<>();
  5. /**
  6. * If non-null, the value; if null, indicates no value is present
  7. */
  8. private final T value;
根據源碼可以看到Optional有兩個屬性 , 一個是為空值準備的EMPTY和泛型值value;
2.3 Optional的方法Optional除toString()、hashCode() 、equals()等Object的方法外 , 還包含以下方法 。
2.3.1 私有構造方法
  1. /**
  2. * Constructs an empty instance.
  3. *
  4. * @implNote Generally only one empty instance, {@link Optional#EMPTY},
  5. * should exist per VM.
  6. */
  7. private Optional() {
  8. this.value = https://www.huyubaike.com/biancheng/null;
  9. }
  10. /**
  11. * Constructs an instance with the value present.
  12. *
  13. * @param value the non-null value to be present
  14. * @throws NullPointerException if value is null
  15. */
  16. private Optional(T value) {
  17. this.value = https://www.huyubaike.com/biancheng/Objects.requireNonNull(value);
  18. }
分別是創建一個空實例和構造一個具有當前值的實例 。
2.3.2 創建方法1)源碼
  1. public static<T> Optional<T> empty() {
  2. @SuppressWarnings("unchecked")
  3. Optional<T> t = (Optional<T>) EMPTY;
  4. return t;
  5. }
  6. public static <T> Optional<T> of(T value) {
  7. return new Optional<>(value);
  8. }
  9. public static <T> Optional<T> ofNullable(T value) {
  10. return value =https://www.huyubaike.com/biancheng/= null ? empty() : of(value);
  11. }
2)方法說明
  • empty(): 創建一個空的 Optional 實例
  • of(T t) : 創建一個 Optional 實例 , 當 t為null時拋出異常
  • ofNullable(T t): 創建一個 Optional 實例 , 但當 t為null時不會拋出異常 , 而是返回一個空的實例
3)測試代碼
  1. public static void main(String[] args) {
  2. Integer value1 = null;
  3. Integer value2 = 1;
  4. try {
  5. Optional<Integer> optional1 = Optional.empty();
  6. System.out.println("optional1創建了");
  7. }catch (Exception e){
  8. System.out.println("optional1失敗了");
  9. }
  10. try {
  11. Optional<Integer> optional2 = Optional.of(value1);
  12. System.out.println("optional2創建了");
  13. }catch (Exception e){

    經驗總結擴展閱讀