Java8オプションの使用ガイド

ユーザーガイダンス

作成する

オプションには、プライベートコンストラクターのみがあります。作成方法の例は次のとおりです。

    @Test
    public void test1() {
    
    
        // 以下两个等价
        System.out.println(Optional.ofNullable(null));
        System.out.println(Optional.empty());

        // 明确是非空的采用这个
        System.out.println(Optional.of("not null"));
    }

出力:

オプション.empty

オプション.empty

オプション[null以外]

直接入手

@Test
public void test2() {
    
    
    Optional<String> opt = Optional.ofNullable("12345");
    System.out.println(opt.get());//12345

    Optional.empty().get();//java.util.NoSuchElementException: No value present
}

存在する場合

@Test
public void test2() {
    
    
    Optional<String> opt = Optional.ofNullable("12345");
    opt.ifPresent(System.out::println); // 12345
}

orElse関連

@Test
public void test3() {
    
    
    Optional<String> opt = Optional.ofNullable(null);
    System.out.println(opt.orElse("hello")); // 输出hello
    System.out.println(opt.orElseGet(() -> new String("by create")));// 输出by create
}

存在する場合は、elseのコンテンツを直接出力します。ElseGetは機能プログラミングの方法を使用してオブジェクトの作成を遅らせます。複雑なオブジェクトorElseGet使用でき、パフォーマンスが向上します。

カスタム例外

@Test
public void test4() {
    
    
    Optional.ofNullable(null).orElseThrow(() -> new RuntimeException("自定义异常"));// 抛出异常
}

mapとflatMap

@Test
public void tes4() {
    
    
    Optional<String> opt = Optional.ofNullable("hello world");
    System.out.println(opt.flatMap(i -> Optional.ofNullable("bad"))); //Optional[bad]
    System.out.println(opt.map(i -> "bad"));//Optional[bad]
}

違いはありません。マップをカプセル化する必要はありません。

総括する

オプションで使用される設計パターンは非常に単純です。つまり、値をラップし、ヌルポインターを回避するための一連のソリューションを提供するラッパーパターンです。

注:Optionalクラスは実装されていませんSerializable

参照文書

  1. jdk公式文書

おすすめ

転載: blog.csdn.net/qq_38619183/article/details/112334433