J’ai vu une méthode dans Java déclarée comme:
void foo(@Nullable Object obj) { ... }
Quelle est la signification de @Nullable
ici? Est-ce que cela signifie que l’entrée pourrait être null
? Sans l’annotation, l’entrée peut toujours être nulle, donc je suppose que ce n’est pas juste ça?
Merci
Cela montre clairement que la méthode accepte les valeurs NULL et que si vous remplacez la méthode, vous devez également accepter les valeurs NULL.
Il sert également de conseil pour les parsingurs de code tels que FindBugs . Par exemple, si une telle méthode supprime son argument sans rechercher d’abord null, FindBugs émettra un avertissement.
Cette annotation est couramment utilisée pour éliminer les NullPointerExceptions
. @Nullable
dit souvent que ce paramètre peut être null
. Un bon exemple de ce type de comportement peut être trouvé dans Google Guice . Dans ce cadre d’dependency injection léger, vous indiquez que cette dépendance peut être null
. Si vous essayiez de passer null
et sans annotation, le framework refuserait de faire son travail.
De plus, @Nullable
peut être utilisé avec les annotations @NotNull
. Vous trouverez ici quelques astuces pour les utiliser correctement. L’inspection du code dans IntelliJ vérifie les annotations et aide à déboguer le code.
Différents outils peuvent interpréter la signification de @Nullable
différemment. Par exemple, Checker Framework et FindBugs gèrent différemment @Nullable
.
Un élément annoté avec @Nullable
value est parfaitement valide pour renvoyer (pour les méthodes), passer à (pour les parameters) et hold (pour les variables et les champs locaux).
Un élément annoté avec @NotNull
affirme qu’il est interdit de retourner une valeur nulle (pour les méthodes), de passer à (pour les parameters) et de les conserver (pour les variables et les champs locaux).
Il existe une relation covariance-contravariance entre @Nullable
et @NotNull
lors de la @NotNull
/ implémentation de méthodes avec une déclaration ou des parameters annotés.
Remplacer / implémenter des méthodes avec une déclaration annotée:
@NotNull
de la méthode parente nécessite la @NotNull
pour la méthode de classe enfant. @Nullable
dans la méthode parent peuvent avoir des annotations @Nullable
ou @NotNull
dans la méthode de classe enfant. Remplacer / implémenter des méthodes avec des parameters annotés:
@Nullable
du paramètre dans la méthode parent nécessite l’annotation @Nullable
pour le paramètre de méthode de classe enfant. @NotNull
du paramètre dans la méthode parent peuvent avoir des annotations @Nullable
ou @NotNull
(ou aucune) pour le paramètre de méthode de classe enfant. Exemple:
@Nullable public static UserContext getThreadUserContext() { TransactionParms tp = TransactionParms.getBoundParms(); return (tp == null) ? null : tp.getUserContext(); }
getThreadUserContext
méthode getThreadUserContext
doit retourner une instance de TransactionParms
. Bu cette instance peut être Null