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 de JSR-305/FindBugs: http://findbugs.sourceforge.net/manual/annotations .html
Je pense que c'est assez clair d'après le lien que vous avez ajouté: si vous utilisez @CheckForNull
et le code qui utilise la valeur ne vérifie pas null
, FindBugs l'affichera comme une erreur.
FindBugs ignorera @Nullable
.
En pratique, cette annotation n'est utile que pour remplacer une annotation globale
NonNull
.
Utilisation @CheckForNull
dans les cas où la valeur doit toujours être vérifiée. Utilisation @Nullable
où null
pourrait être OK.
EDIT: il semble que @CheckForNull
n'est pas bien supporté pour le moment, donc je suggère de l'éviter et d'utiliser @NonNull
(voir aussi Quelle annotation @NotNull Java annotation dois-je utiliser? ). Une autre idée serait de contacter directement les développeurs de FindBugs et de demander leur avis. sur l'incohérence dans la documentation.
@Nonnull
et @Nullable
sont correctement gérés par IntelliJ IDEA. FindBugs a trouvé le problème avec @Nonnull
mais j'ai raté ceux pour @Nullable
et @CheckForNUll
. Les problèmes détectés par IDEA et FindBugs sont signalés par des commentaires.
package com.db.icestation;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class test {
@Nullable public String nullable() {
return "";
}
@Nonnull public String nonnull() {
return null; // IDEA, findbugs
}
@CheckForNull public 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 pris en charge par défaut et toute tentative de déréférencement @Nullable
les arguments ou les valeurs de retour entraîneront un avertissement.
@ alexander-pavlov, vous pouvez ajouter @javax.annotation.CheckForNull
dans la configuration de l'inspection "Conditions constantes et exceptions". Allez Fichier-> Paramètres-> Inspections-> Bogues probables-> Conditions constantes et exceptions-> Configurer les annotations.
Je préfère faire ça comme @CheckForNull
a une signification plus claire que @Nullable
comme @lbalazscs mentionné dans sa réponse ci-dessus.