Java 8 の Optional は、複雑なゲッター チェーンでの NullPointerExceptions を回避するのにどのように役立ちますか?

Susan Sarandon
リリース: 2024-10-25 10:03:02
オリジナル
910 人が閲覧しました

How can Optional in Java 8 help me avoid NullPointerExceptions in complex getter chains?

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 を返し、null 参照を気にせずにドア オブジェクトと安全に対話できるようにします。

以上がJava 8 の Optional は、複雑なゲッター チェーンでの NullPointerExceptions を回避するのにどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!