1. ホーム
  2. java

[解決済み] Lombok-Annotationの@NonNullを使用する理由は何ですか?

2022-02-02 13:13:50

質問

ロンボク島では アノテーション @NonNull を実行し、NPE を投げます (別の方法で設定されていない場合)。

に書かれているように、なぜそのアノテーションを使うのか理解できません。 そのドキュメントの

private String name;
public NonNullExample(@NonNull Person person) {
    super("Hello");
    if (person == null) {
      throw new NullPointerException("person is marked @NonNull but is null");
    }
    this.name = person.getName();
  }

いずれにせよNPEは投げられるでしょう。アノテーションを使用する唯一の理由は、例外をNPEと異なるものにしたい場合です。

EDIT: 確かにExceptionは明示的に投げられるので、「制御」されていることは分かりますが、少なくともエラーメッセージのテキストは編集可能であるべきですよね?

解決方法は?

のようなタイプアノテーションを書くと @NonNull には、いくつかの目的があります。

  • それは ドキュメンテーション これは、Javadoc テキストよりも簡潔で正確な方法で、メソッドのコントラクトをクライアントに伝えるものです。
  • それは、以下を可能にします。 ランタイムチェック -- つまり、バグを持ったクライアントがあなたのメソッドを誤って使用した場合、あなたのプログラムが有用なエラーメッセージとともにクラッシュすることを保証します(より悪いことをするのではありません)。 Lombokは、プログラマにランタイムチェックを書かせることなく、あなたに代わってこれを行います。 その 参照した例 は、2つの方法を示しています。 @NonNull アノテーションを使用するか、プログラマが明示的にチェックを行うかです。 Vanilla Java"バージョンは、タイポがあるか(迷子の @NonNull またはLombokが処理した後のコードが表示されます。
  • を有効にします。 コンパイル時チェック . のようなツールは チェッカーフレームワーク を保証するものです。 ない が実行時にクラッシュします。 のようなツールは NullAway , エラーになりやすい そして バグの発見 はヒューリスティックなバグ検出器であり、null の誤用について警告してくれますが、保証はしてくれません。