I can see that @Nullable
and @Nonnull
annotations could be helpful in preventing NullPointerException
s but they do not propagate very far.
@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?
Short answer: I guess these annotations are only useful for your IDE to warn you of potentially null pointer errors.
As said in the "Clean Code" book, you should check your public method's parameters and also avoid checking invariants.
Another good tip is never returning null values, but using Null Object Pattern instead.