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.