web-dev-qa-db-fra.com

Bonne façon d'utiliser l'annotation @NonNull dans Android Studio

J'aimerais utiliser l'annotation @NonNull Dans Android, mais je n'arrive pas à trouver la bonne façon de le faire. Je vous propose cet exemple:

public void doStuff(@NonNull String s){
     //do work with s...    
}

Donc quand j'appelle doStuff(null) la IDE me donnera un avertissement. Le problème est que je ne peux pas compter sur cette annotation car, comme this question souligne, ils ne se propagent pas très loin. Je voudrais donc mettre un contrôle nul sur ma méthode, comme ceci:

 if(s==null) throw new IllegalAgrumentException();

Mais l'IDE, en supposant que s!=null, M'avertira que s==null Est toujours faux. J'aimerais savoir quelle est la meilleure façon de procéder.

Personnellement, je pense qu'il devrait y avoir une annotation comme @ShouldntBeNull Qui seulement vérifie et avertit que null ne lui est pas transmis, mais ne se plaint pas lorsque la valeur est vérifiée nulle.

25
MMauro

Vous pouvez utiliser Objects.requireNonNull pour cela. Il fera le contrôle en interne (donc le IDE n'affichera pas d'avertissement sur votre fonction) et déclenchera une NullPointerException lorsque le paramètre est null:

public MyMethod(@NonNull Context pContext) {
    Objects.requireNonNull(pContext);
    ...
}

Si vous souhaitez lever une autre exception ou utiliser un niveau d'API <19, vous pouvez simplement créer votre propre classe d'assistance pour implémenter la même vérification. par exemple.

public class Check {
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new IllegalArgumentException();
        return obj;
    }
}

et l'utiliser comme ça:

public MyMethod(@NonNull Context pContext) {
    Check.requireNonNull(pContext);
    ...
}
13
TmTron

exemples Google procédez comme suit

import static com.google.common.base.Preconditions.checkNotNull;

...

public void doStuff(@NonNull String sParm){
     this.sParm= checkNotNull(s, "sParm cannot be null!");
}
8
user60108

Vous pouvez utiliser la suppression de style de commentaire pour désactiver cet avertissement de vérification nulle spécifique, par exemple:

    public MyMethod(@NonNull Context pContext) {
        //noinspection ConstantConditions
        if (pContext == null) {
            throw new IllegalArgumentException();
        }
        ...
    }

Vous en aurez besoin //noinspection ConstantConditions chaque fois que vous le faites.

6
Darrell