Quelle est l'annotation mieux 'NonNull'?
"Meilleur" dans le sens de
Voici à quoi le monde ressemble actuellement - tout autre aperçu est apprécié:
javax.validation.constraints.NotNull
( Documents )
+ le package javax semble donc à l'épreuve du temps
- Partie de JEE pas JSE. Dans JSE, il faut importer des bibliothèques supplémentaires .
- Non pris en charge par les outils d'analyse statique (validation à l'exécution uniquement)
( documents )edu.umd.cs.findbugs.annotations.NonNull
- bibliothèque externe et non un package javax
- obsolète depuis la version 3.X de findbugs
+ utilisé pour l'analyse statique (par findbugs et donc Sonar)
( documents )javax.annotation.Nonnull
+ utilisé pour l'analyse statique (dans les findbugs)
- JSR-305 est dormant/mort/inconnu comme sur la liste de diffusion fb indiquée. L'auteur Bill Pugh, même s'il lui a été directement demandé, n'a pas commenté l'état depuis des années ...
( docs , intéressant présentation )org.Eclipse.jdt.annotation_2.0.0
+ utilisé pour l'analyse statique (dans Eclipse pas dans les findbugs cependant)
- propriétaire d'Eclipse (n'a pas essayé de les utiliser de façon autonome)
( documents )org.jetbrains.annotations.NotNull
+ utilisé pour l'analyse statique (dans intelliJ pas dans findbugs cependant)
- propriétaire d'IntelliJ (mais également accessible au public sous forme de bocal)
lombok.NonNull
( documents )
+ utilisé pour contrôler la génération de code
- annotation propriétaire
Android.support.annotation.NonNull
( documents )
+ analyse statique dans Android studio
- Android annotation propriétaire spécifique
org.checkerframework.checker.nullness.qual.NonNull
( documents )
+ JSR308 implémentation qui fait partie de Java8 (qui a introduit la possibilité d'écrire des annotations dans différentes parties de votre code, mais n'a pas introduit de nouvelles annotations)
+ utilisé pour le code statique (mais pas pour les findbugs) et analyse d'exécution
- la bibliothèque externe semble cependant être approuvée par les gens Java
Actuellement, j'aurais tendance à Checker Framework mais j'ai hâte d'avoir d'autres vues ...
[clause de non-responsabilité] Je sais que la question a été posée ici mais n'a pas reçu de réponse (ou la réponse était incorrecte/incomplète/obsolète) [/ clause de non-responsabilité]
Il n'y a pas d'annotation @NonNull
Standard. La création d'une telle annotation était l'objectif de la JSR 305, abandonnée depuis longtemps. Il n'y aura pas d'annotation @NonNull
Standard tant que JSR 305 n'aura pas été reconstitué. Oracle n'a actuellement aucune intention de le faire. (Les annotations JEE n'entrent pas dans le champ d'application de la JSR 305.)
Pour la pérennité, le facteur le plus important à considérer est de savoir si l'annotation est une annotation de type ou une annotation de déclaration. Étant donné que @NonNull
Indique une propriété de la valeur de la variable plutôt que de la variable elle-même, il doit s'agir d'une annotation de type. Être une annotation de type permet également d'écrire l'annotation sur plus d'emplacements, comme dans List<@NonNull String>
.
Vous pouvez déterminer si une annotation est une annotation de type en consultant la méta-annotation @Target
Dans la définition de l'annotation. Au moment d'écrire ces lignes, il semble que seules les versions de Checker Framework et Eclipse sont des annotations de type, donc je les choisirais plutôt que celles qui sont des annotations de déclaration. Notez que les développeurs de toutes les autres annotations peuvent également les mettre à jour pour être des annotations de type; Je ne connais pas leurs plans.
Le seul inconvénient est que l'utilisation d'une annotation de type nécessite l'utilisation d'un compilateur Java 8. Checker Framework possède des mécanismes pour permettre au code contenant ses annotations d'être compilé par un compilateur Java 7.