1

インタビューの準備をしていると、Gayle Laakman のキャリア カップ ビデオの 1 つに、ある男が配列を取り込んでそれを使って何かを行う簡単なメソッドを書いています。彼女はエラーチェックの欠如について言及しているので、彼はこの行に次のように追加します:

public int max(int[] array) {
    if (array == null)
        throw new NullPointerException();

    //method body

}

このような NPE 例外を手動でスローするのは正しいですか。この例外は、ある時点で配列参照を使用するため、メソッド本体でスローされます。

これの考えられる利点は、入力の無効化をメソッドロジックが無効であり、何らかの方法で null 参照を作成することから切り離すことです。それ以外の場合は少し混乱し、IllegalArgumentException の方が適切に機能するのではないでしょうか?

4

2 に答える 2

1

Java独自のユーティリティクラスもご覧くださいjava.util.Objects

public static <T> T requireNonNull(T obj,
               String message)

指定されたオブジェクト参照が null でないことを確認し、null である場合はカスタマイズされた NullPointerException をスローします。このメソッドは、以下に示すように、複数のパラメーターを持つメソッドとコンストラクターでパラメーターの検証を行うために主に設計されています。

 public Foo(Bar bar, Baz baz) {
     this.bar = Objects.requireNonNull(bar, "bar must not be null");
     this.baz = Objects.requireNonNull(baz, "baz must not be null");
 }
  • 型パラメーター:
    T - 参照の型

  • パラメータ:
    obj - nullity をチェックするオブジェクト参照
    message - NullPointerException がスローされた場合に使用される詳細メッセージ

  • 戻り値: null でない場合は
    obj

  • 例外:
    NullPointerException - obj が null の場合

https://docs.oracle.com/javase/7/docs/api/java/util/Objects.htmlから

結論

このユーティリティ クラスを使用するかどうかは別の問題ですが、Java 言語の背後にあるチームがこれらの目的でNullPointerExceptionを使用することを意図していたことは明らかです。

于 2017-03-22T06:40:55.247 に答える