@ 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

265
demandé sur user1508893 2012-12-29 01:54:07

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.

288
répondu JB Nizet 2013-09-10 07:40:29

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.

70
répondu Adam Sznajder 2017-01-26 16:46:09

, Différents outils peuvent interpréter la signification de @Nullable différemment. Par exemple, Vérificateur Cadre et FindBugs poignée @Nullable autrement.

15
répondu reprogrammer 2017-01-21 06:25:21

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

9
répondu Karthikeyan 2017-03-16 12:08:06