ゲッター チェーンでの Null チェックを適切に処理する方法: オプションとデメテルの法則?

Susan Sarandon
リリース: 2024-10-27 07:23:29
オリジナル
358 人が閲覧しました

How to Gracefully Handle Null Checks in Getter Chains: Optional vs. Law of Demeter?

ゲッター呼び出しの連鎖における Null チェックのエレガントな処理

ソフトウェア開発では、ゲッターを連鎖させる必要がある状況に遭遇することがよくあります。

<code class="java">house.getFloor(0).getWall(WEST).getDoor().getDoorknob();</code>
ログイン後にコピー

などの呼び出し。ただし、チェーンに沿ったオブジェクトのいずれかが null の場合、そのようなチェーンは NullPointerExceptions の影響を受ける可能性があります。これを防ぐために、開発者は多くの場合、長時間の null チェックに頼って、不必要な複雑さとコードの重複を追加します。

代替アプローチ

この問題を処理する Java の the-box ユーティリティ クラスには、エレガントな代替手段があります:

デメテル違反の法則

@Erwin Bolwidt が提案したように、デメテルの法則 (LoD) を使用し、ネストされたプロパティに直接アクセスします。

<code class="java">if (house != null && house.floors != null && house.floors[0] != null && house.floors[0].walls != null && house.floors[0].walls[WEST] != null) ...</code>
ログイン後にコピー

このアプローチはカプセル化の原則に違反し、コードが複雑になるため推奨されません。

Java 8 ではオプションです。

Java 8 では、null をよりエレガントに処理できるようにする Optional 型が導入されました。各ゲッター呼び出しをオプションでラップできます。

<code class="java">Optional.ofNullable(house)
        .map(house -> house.getFloor(0))
        .map(floor -> floor.getWall(WEST))
        .map(wall -> wall.getDoor())
        .map(door -> door.getDoorknob());</code>
ログイン後にコピー

このアプローチでは、明示的な null チェックの必要性がなくなり、より簡潔で表現力豊かな構文が提供されます。

結論

ゲッター チェーンの null をチェックするための組み込みユーティリティはありませんが、Optional 型とデメテルの法則違反により、柔軟でコンテキスト依存のソリューションが提供されます。最適なアプローチの選択は、特定のシナリオとプロジェクトの設計原則によって異なります。

以上がゲッター チェーンでの Null チェックを適切に処理する方法: オプションとデメテルの法則?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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