「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ## オプションのチェーンは、連鎖された「Get」呼び出しでの NullPointerExceptions を排除するための鍵ですか?

## オプションのチェーンは、連鎖された「Get」呼び出しでの NullPointerExceptions を排除するための鍵ですか?

2024 年 11 月 15 日に公開
ブラウズ:695

## Are Optional Chains the Key to Eliminating NullPointerExceptions in Chained \

Null が発生しやすい "Get" 呼び出しのチェーンを安全にナビゲートする

複雑なコードベースでは、複数の "get" 呼び出しの連鎖が温床になる可能性がありますNullPointerException の場合。潜在的な null 値を防ぐために、開発者は中間オブジェクトごとに詳細な null チェックを行うことがよくあります。

しかし、そのようなシナリオを処理するより洗練された効率的な方法はありますか?

オプションのチェーン

Java 8 の Optional クラスには、オプション チェーンと呼ばれる洗練されたソリューションがあります。オプションのラッピングを使用すると、生の T の代わりに Optional 値を返すことで、null を適切に処理できます。

Optional チェーンを使用すると、一連の get 呼び出しをシームレスに実行し、それぞれをオプションの値にマッピングできます。 Null チェックは内部で処理され、前の操作が null 以外の値を返した場合にのみ後続の操作が実行されるようにします。

たとえば、次のような「get」呼び出しのチェーンを考えてみましょう:

house。 getFloor(0).getWall(WEST).getDoor().getDoorknob();

NullPointerExceptions を回避するには、次の null チェックを使用できます。

if (house != null && house.getFloor(0) != null && house.getFloor(0).getWall(WEST) != null && house.getFloor(0).getWall(WEST).getDoor() != null) ...

ただし、オプションのチェーンを使用すると、これを次のように簡略化できます:

Optional.ofNullable(house)
    .map(h -> h.getFloor(0))
    .map(floor -> floor.getWall(WEST))
    .map(wall -> wall.getDoor())
    .map(door -> door.getDoorknob());

使用例

例を使ってオプションのチェーンの威力を説明しましょう:

System.out.println("----- Not Initialized! -----");

Optional.ofNullable(new Outer())
    ... // Omitted chain of optional maps
    .ifPresent(foo -> System.out.println("foo: "   foo)); //no print

System.out.println("----- Let's Initialize! -----");

Optional.ofNullable(new OuterInit())
    ... // Omitted chain of optional maps
    .ifPresent(foo -> System.out.println("foo: "   foo)); //will print!

この例では、オブジェクトが初期化されるときに、オプションのチェーンが null を適切に処理し、結果として正常に印刷されます。オプションのチェーンがないと、NullPointerException が発生します。

オプションのチェーンは、null の処理を​​簡素化するだけでなく、コードの可読性と保守性も向上します。 Optional を活用すると、「get」呼び出しのチェーンを安全にナビゲートできるため、明示的な null チェックの負担が軽減され、コードベース全体の堅牢性が向上します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3