@ Annotation Nullable utilisation
J'ai vu une méthode en java déclarée comme:
void foo(@Nullable Object obj)
{ ... }
Quelle est la signification de @Nullable
ici? Cela signifie-t-il 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 seulement ça?
Merci
4 réponses
, Il précise que la méthode accepte les valeurs null, et que si vous remplacez la méthode, il faut aussi accepter les valeurs null.
Il sert également d'indice pour les analyseurs de code comme FindBugs . Par exemple, si une telle méthode déréfère son argument sans vérifier d'abord null, FindBugs émettra un avertissement.
Cette annotation est couramment utilisée pour éliminer NullPointerExceptions
. @Nullable
est souvent dit que ce paramètre peut être null
. Un bon exemple de ce comportement peut être trouvé dans Google Guice . Dans ce framework d'injection de dépendance léger, vous indiquez que cette dépendance peut être null
. Si vous essayez de passer null
et sans annotation, le framework refuserait de faire son travail.
Plus @Nullable
peut être utilisé avec @NotNull
annotation. Ici vous pouvez Trouver quelques conseils comment 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, Vérificateur Cadre et FindBugs poignée @Nullable
autrement.
Un élément annoté avec @Nullable
claims null value est parfaitement valide pour retourner (pour les méthodes), passer à (pour les paramètres) et tenir (pour les variables locales et les champs).
Un élément annoté avec @NotNull
claims null value est interdit de retourner (pour les méthodes), de passer à (pour les paramètres) et de maintenir (pour les variables et les champs locaux).
Il existe une relation covariance-contravariance entre @Nullable
et @NotNull
lors du remplacement/de l'implémentation de méthodes avec une déclaration annotée ou paramètre.
Primordial/méthodes de mise en œuvre avec une annoté déclaration:
- l'annotation
@NotNull
de la méthode parente nécessite@NotNull
annotation pour la méthode de classe enfant.
Les méthodes - avec l'annotation
@Nullable
dans la méthode parent peuvent avoir soit@Nullable
ou@NotNull
annotations dans la classe enfant méthode.
Remplacer/implémenter des méthodes avec des paramètres annotés:
- l'annotation
@Nullable
du paramètre dans la méthode parent nécessite l'annotation@Nullable
pour la méthode de classe enfant paramètre. - méthodes avec l'annotation
@NotNull
du paramètre dans le parent la méthode peut avoir des annotations@Nullable
ou@NotNull
(ou aucune d'entre eux) 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();
}
Ici, la méthode getThreadUserContext
doit renvoyer une instance de TransactionParms
. Bu cette instance peut être Null