ホームページ >Java >&#&チュートリアル >## オプションのチェーンは、連鎖された「Get」呼び出しでの NullPointerExceptions を排除するための鍵ですか?
Null が発生しやすい "Get" 呼び出しのチェーンを安全にナビゲートする
複雑なコードベースでは、複数の "get" 呼び出しの連鎖が温床になる可能性がありますNullPointerException の場合。潜在的な null 値を防ぐために、開発者は中間オブジェクトごとに詳細な null チェックを行うことがよくあります。
しかし、そのようなシナリオを処理するより洗練された効率的な方法はありますか?
オプションのチェーン
Java 8 の Optional クラスには、オプション チェーンと呼ばれる洗練されたソリューションがあります。オプションのラッピングを使用すると、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」呼び出しでの NullPointerExceptions を排除するための鍵ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。