J'ai vu une méthode en java déclarée comme:
void foo(@Nullable Object obj)
{ ... }
Quelle est la signification d' @Nullable
ici? Cela signifie-t-il que l'entrée pourrait l'être null
?
Sans l'annotation, l'entrée peut toujours être nulle, donc je suppose que ce n'est pas juste ça?
java
annotations
user1508893
la source
la source
@Nullable
dans le cadre de votre question? Est-ce Checker?Réponses:
Il indique clairement que la méthode accepte les valeurs nulles et que si vous remplacez la méthode, vous devez également accepter les valeurs nulles.
Il sert également d'indicateur pour les analyseurs de code comme FindBugs . Par exemple, si une telle méthode déréférence son argument sans vérifier d'abord null, FindBugs émet un avertissement.
la source
Cette annotation est couramment utilisée pour éliminer
NullPointerExceptions
.@Nullable
dit que ce paramètre pourrait êtrenull
. Un bon exemple d'un tel comportement peut être trouvé dans Google Guice . Dans ce cadre d'injection de dépendance léger, vous pouvez dire que cette dépendance pourrait l'êtrenull
. Si vous tentiez de passernull
sans annotation, le framework refuserait de faire son travail.De plus, il
@Nullable
peut être utilisé avec une@NotNull
annotation. Vous trouverez ici quelques conseils pour les utiliser correctement. L'inspection de code dans IntelliJ vérifie les annotations et aide à déboguer le code.la source
Différents outils peuvent interpréter la signification de
@Nullable
différemment. Par exemple, Checker Framework et FindBugs se gèrent@Nullable
différemment .la source
Certes, il y a certainement des pensées différentes, dans mon monde, je ne peux pas imposer "Ne jamais passer une valeur nulle" parce que je traite avec des tiers incontrôlables comme les appelants API, les enregistrements de base de données, les anciens programmeurs, etc ... donc je suis paranoïaque et défensif dans les approches . Étant donné que vous utilisez Java8 ou une version ultérieure, il existe une approche un peu plus propre qu'un
if
bloc.Vous pouvez également lancer une exception en remplaçant
.orElse
parorElseThrow(() -> new Exception("Dont' send a null"))
.Si vous ne voulez pas utiliser @Nullable, qui n'ajoute rien de fonctionnel, pourquoi ne pas simplement nommer le paramètre avec
mayBe...
pour que votre intention soit claire.la source