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.
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);
...
}
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!");
}
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.