NullPointerException は、Java プログラムが初期化されていない (つまり、null を指している) オブジェクト参照を使用しようとすると発生します。これは、null オブジェクトのメソッドの呼び出し、null オブジェクトのフィールドへのアクセスまたは変更、null 以外の引数を期待するメソッドに null オブジェクトを渡すなど、さまざまなシナリオで発生する可能性があります。
NullPointerException が発生する一般的なシナリオ
NPE が一般的に発生する場所を理解すると、NPE を積極的に回避するのに役立ちます。一般的なシナリオをいくつか示します:
NullPointerException を回避することは、何よりも適切なプログラミングの実践に関係します。以下にいくつかの効果的な戦略を示します:
Java 8 で導入された Optional クラスは、明示的に null を使用せずにオプションの値を処理するように設計されています。このアプローチでは、null 以外の値を含むコンテナーまたは空のコンテナーを提供することで、NullPointerException を防ぐことができます。
例:
Optional<String> name = Optional.ofNullable(getName()); name.ifPresent(n -> System.out.println(n.toUpperCase()));
getName().toUpperCase() を直接呼び出す代わりに、getName() が null を返した場合に NPE が発生する可能性があるため、Optional.ifPresent() を使用します。 は、値が存在する場合にのみアクションを実行します。
Lombok などの Java ライブラリや Spring などのフレームワークは、コンパイル時のチェックを提供し、NPE を防止するための @NonNull や @Nullable などのアノテーションを提供します。
例:
public void printName(@NonNull String name) { System.out.println(name.toUpperCase()); }
ここで、null が printName() メソッドに渡されると、IDE 設定またはビルド構成に応じて、コンパイル時の警告またはエラーが発生します。
Objects.requireNonNull() は、指定されたオブジェクトが null の場合にカスタム メッセージとともに NullPointerException をスローするユーティリティ メソッドです。
例:
String name = Objects.requireNonNull(getName(), "Name cannot be null"); System.out.println(name.toUpperCase());
このコードは、getName() が null を返した場合にカスタム NullPointerException をスローし、コードの後半での予期しない動作を防ぎます。
防御的プログラミングには、潜在的な null 値を予測し、それらを適切に処理するコードを作成することが含まれます。
変数を宣言するときは、必ず初期化してください。これは防御的プログラミングの基本原則です。
例:
Optional<String> name = Optional.ofNullable(getName()); name.ifPresent(n -> System.out.println(n.toUpperCase()));
名前を null ではなく空のリストとして初期化すると、リストに対する操作によって NPE が発生しなくなります。
条件付きチェックを使用すると、明示的に例外をスローせずに潜在的な null 値を処理できます。
例:
public void printName(@NonNull String name) { System.out.println(name.toUpperCase()); }
このコードは、名前を大文字に変換する前に名前が null でないかどうかをチェックし、それ以外の場合は安全なフォールバックを提供します。
各 Java リリースでは、開発者がより安全でクリーンで堅牢なコードを作成できるようにする新機能が導入されています。
Java 8 では、キーがマップ内に存在しない可能性がある状況を処理するために Map.getOrDefault() を導入し、null の代わりにデフォルト値を返します。
例:
String name = Objects.requireNonNull(getName(), "Name cannot be null"); System.out.println(name.toUpperCase());
ここで、キー "host" が存在しない場合、メソッドは null の代わりに "localhost" を返します。
Java 8 の Stream API を使用すると、null 値を気にせずに安全なデータ処理が可能になります。
例:
List<String> names = new ArrayList<>(); // Instead of List<String> names = null;
このコードはリストから null 値を除外し、filteredNames に対する後続の操作が null セーフであることを保証します。
NullPointerException を防ぐことは、信頼性の高い Java コードを作成するために不可欠です。オプションの防御的プログラミング、最新の Java 機能、null チェックの使用など、これらのテクニックを適用すると、アプリケーションでの NPE の発生を大幅に減らすことができます。
Java での NullPointerException の処理に関する質問やヒントがある場合は、お気軽に以下にコメントしてください。一緒に話し合って学びましょう!
詳細については、 で投稿をご覧ください: Java で NullPointerException を回避するためのヒント
以上がJava で NullPointerException を回避するためのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。