@Nullable と @Nonnull アノテーションをより効果的に使用するにはどうすればよいでしょうか? 質問する

@Nullable と @Nonnull アノテーションをより効果的に使用するにはどうすればよいでしょうか? 質問する

注釈@Nullableも見ることができます@Nonnullできたの防止には役立ちますNullPointerExceptionが、あまり遠くまで伝播しません。

  • これらの注釈の有効性は、1 レベルの間接参照後に完全に低下するため、いくつか追加しただけでは、あまり広範囲に伝播しません。
  • @Nonnullこれらの注釈は適切に適用されていないため、でマークされた値がnull ではないと想定され、結果として null チェックが実行されない危険性があります。

以下のコードを実行すると、 でマークされたパラメータが、何もエラーを発生することなく@Nonnullになります。実行すると がnullスローされます。NullPointerException

public class Clazz {
    public static void main(String[] args){
        Clazz clazz = new Clazz();

        // this line raises a complaint with the IDE (IntelliJ 11)
        clazz.directPathToA(null);

        // this line does not
        clazz.indirectPathToA(null); 
    }

    public void indirectPathToA(Integer y){
        directPathToA(y);
    }

    public void directPathToA(@Nonnull Integer x){
        x.toString(); // do stuff to x        
    }
}

これらの注釈をより厳密に適用したり、さらに伝播させたりする方法はありますか?

ベストアンサー1

短い答え: これらの注釈は、潜在的な null ポインター エラーを IDE が警告するのにのみ役立つと思います。

「Clean Code」という本で述べられているように、パブリック メソッドのパラメーターをチェックし、不変条件のチェックも避ける必要があります。

もう一つの良いヒントは、決してnull値を返さず、ヌルオブジェクトパターンその代わり。

おすすめ記事