Utilisation de l’annotation @Nullable

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:

  • L’annotation @NotNull de la méthode parente nécessite la
    Annotation @NotNull pour la méthode de classe enfant.
  • Les méthodes avec l’annotation @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:

  • L’annotation @Nullable du paramètre dans la méthode parent nécessite l’annotation @Nullable pour le paramètre de méthode de classe enfant.
  • Les méthodes avec l’annotation @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