Getter 呼び出しのチェーンでの Null の安全性の確保
Getter 呼び出しの複雑なチェーンで NullPointerException を防ぐための一般的なアプローチの 1 つは、明示的な Null チェックです。
ただし、このアプローチは、特にゲッター呼び出しが多数あるシナリオでは、退屈で冗長になる可能性があります。これに対処するために、Java 8 では、null 値をエレガントに管理し、コード構造を簡素化する Optional 型を導入しました。
Optional を利用して Null を処理する
Optional を利用することで、次のことが可能になります。デメテルの法則に違反することなく、ゲッター チェーン内の null をシームレスに処理します。オプションを使用すると、ゲッター呼び出しを効果的に実行する複数のマップ操作を連鎖させることができます。 Null チェックは、このフレームワーク内で自動的に処理されます。
オブジェクトが初期化されていない次の例を考えてみましょう。
<code class="java">System.out.println("----- Not Initialized! -----"); Optional.ofNullable(new Outer()) .map(out -> out.getNested()) .map(nest -> nest.getInner()) .map(in -> in.getFoo()) .ifPresent(foo -> System.out.println("foo: " + foo)); //no print</code>
この場合、実行中に null 値が検出されるため、出力は生成されません。
次に、オブジェクトを初期化しましょう:
<code class="java">System.out.println("----- Let's Initialize! -----"); Optional.ofNullable(new OuterInit()) .map(out -> out.getNestedInit()) .map(nest -> nest.getInnerInit()) .map(in -> in.getFoo()) .ifPresent(foo -> System.out.println("foo: " + foo)); //will print!</code>
今回は、プログラムは「foo:Yeah!」を正常に出力し、Optional が null 値を適切に処理する方法を示しています。
ゲッター チェーンへのオプションの適用
house.getFloor(0).getWall(WEST).getDoor().getDoorknob() を含む特定のゲッター チェーンの場合、次のことができます。 Optional を次の方法で利用します:
<code class="java">Optional.ofNullable(house) .map(house -> house.getFloor(0)) .map(floorZero -> floorZero.getWall(WEST)) .map(wallWest -> wallWest.getDoor()) .map(door -> wallWest.getDoor())</code>
このコード スニペットは Optional
以上がJava 8 の Optional は、複雑なゲッター チェーンでの NullPointerExceptions を回避するのにどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。