182 votes

Comment utiliser plus efficacement les annotations @Nullable et @Nonnull ?

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 ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X