Je peux voir que @Nullable
y @Nonnull
annotations pourrait être utile pour prévenir NullPointerException
mais ils ne se propagent pas très loin.
- L'efficacité de ces annotations diminue complètement après un niveau d'indirection, de sorte que si vous n'en ajoutez que quelques-unes, elles ne se propagent pas très loin.
- Puisque ces annotations ne sont pas bien appliquées, il y a un danger de supposer qu'une valeur marquée par le symbole
@Nonnull
n'est pas nulle et n'effectue donc pas de contrôles de nullité.
Le code ci-dessous fait en sorte qu'un paramètre marqué avec @Nonnull
à être null
sans soulever de plainte. Il lance un NullPointerException
lorsqu'il est exécuté.
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
}
}
Existe-t-il un moyen de rendre ces annotations plus strictement appliquées et/ou de les propager davantage ?