javax.annotation: @Nullable vs @CheckForNull
Quelle est la différence entre les deux? Les deux semblent signifier que la valeur peut être nulle et doit être traitée en conséquence, c'est-à-dire vérifiée pour null.
mise à Jour: Les deux annotations ci-dessus font partie du JSR-305 / FindBugs: http://findbugs.sourceforge.net/manual/annotations.html
3 réponses
je pense que c'est assez clair à partir du lien que vous avez ajouté: si vous utilisez @CheckForNull
et le code qui utilise la valeur ne vérifie pas null
, FindBugs le montrera comme une erreur.
FindBugs ignorera @Nullable
.
dans la pratique, cette annotation n'est utile que pour remplacer une annotation générale
NonNull
.
utiliser @CheckForNull
dans les cas où la valeur doit toujours être vérifiée. Utilisez @Nullable
où null
pourrait être OK.
EDIT: il semble que @CheckForNull
ne soit pas bien supporté pour le moment, donc je suggère de l'éviter et d'utiliser @NonNull
(voir aussi que @NotNull Java annotation devrait-il utiliser? ).
Une autre idée serait d'entrer en contact directement avec les développeurs de FindBugs, et de demander leur avis sur l'incohérence dans la documentation.
@Nonnull
et @Nullable
sont correctement traités par IntelliJ IDEA. FindBugs a trouvé le problème avec @Nonnull
mais a manqué ceux pour @Nullable
et @CheckForNUll
. Les problèmes qui ont été détectés par IDEA et FindBugs sont marqués par des commentaires.
package com.db.icestation;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class test {
public @Nullable String nullable() {
return "";
}
public @Nonnull String nonnull() {
return null; // IDEA, findbugs
}
public @CheckForNull String checkForNull() {
return null;
}
public static void main(String[] args) {
System.out.println(new test().nullable().length()); // IDEA
System.out.println(new test().nonnull().length());
System.out.println(new test().checkForNull().length());
}
}
dans L'idée IntelliJ @javax.annotation.Nullable
est supporté par défaut et toute tentative de déréférence @Nullable
arguments ou valeurs de retour résultera en avertissement.
@alexander-pavlov, vous pouvez ajouter @javax.annotation.CheckForNull
en configuration d'inspection" conditions constantes et exceptions". Aller Fichier - > Paramètres - > Inspections - > bogues probables->conditions constantes et exceptions - >annotations de configuration.
je préfère faire comme @CheckForNull
a plus clair Signification de @Nullable
comme @lbalazscs mentionné dans sa réponse ci-dessus.