注釈@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値を返さず、ヌルオブジェクトパターンその代わり。