@ 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
@NotNullde la méthode parente nécessite@NotNullannotation pour la méthode de classe enfant.
Les méthodes - avec l'annotation
@Nullabledans la méthode parent peuvent avoir soit@Nullableou@NotNullannotations dans la classe enfant méthode.
Remplacer/implémenter des méthodes avec des paramètres annotés:
- l'annotation
@Nullabledu paramètre dans la méthode parent nécessite l'annotation@Nullablepour la méthode de classe enfant paramètre. - méthodes avec l'annotation
@NotNulldu paramètre dans le parent la méthode peut avoir des annotations@Nullableou@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