Null が発生しやすい "Get" 呼び出しのチェーンを安全にナビゲートする
複雑なコードベースでは、複数の "get" 呼び出しの連鎖が温床になる可能性がありますNullPointerException の場合。潜在的な null 値を防ぐために、開発者は中間オブジェクトごとに詳細な null チェックを行うことがよくあります。
しかし、そのようなシナリオを処理するより洗練された効率的な方法はありますか?
オプションのチェーン
Java 8 の Optional クラスには、オプション チェーンと呼ばれる洗練されたソリューションがあります。オプションのラッピングを使用すると、生の T の代わりに 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
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3