@Nullable
および@Nonnull
注釈は sを防ぐのに役立つ可能性があることがわかりますNullPointerException
が、それらはあまり伝播しません。
- これらのアノテーションの有効性は、1 レベルの間接化の後で完全に低下するため、いくつか追加しただけでは、遠くまで伝播しません。
- これらの注釈は十分に実施されていないため、 でマークされた値が
@Nonnull
null ではないと想定し、結果として null チェックを実行しない危険性があります。
以下のコードは、 でマークされたパラメーターを問題なく使用@Nonnull
できるようにしますnull
。実行時にa をスローし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
}
}
これらの注釈をより厳密に適用したり、さらに伝播したりする方法はありますか?