I can see that @Nullable
and @Nonnull
annotations could be helpful in preventing NullPointerException
s but they do not propagate very far.
- The effectiveness of these annotations drop off completely after one level of indirection, so if you only add a few they don't propagate very far.
- Since these annotations are not well enforced there is a danger of assuming a value marked with
@Nonnull
is not null and consequently not performing null checks.
The code below causes a parameter marked with @Nonnull
to be null
without raising any complaints. It throws a NullPointerException
when it is run.
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
}
}
Is there a way to make these annotations more strictly enforced and/or propagate further?