javax.annotation.Nonnull vs assert
Je suis en utilisant Findbugs et javax.annotation.Non sur les paramètres de la méthode.
Sur les méthodes privées je l'habitude d'ajouter une assertion ligne pour vérifier nullness comme
private void myMethod(@Nonnull String str) {
assert str != null
....
Dernière Netbeans version 7.3rc2) rapporte que l'assertion n'est pas nécessaire (à cause de la Non annotation). Je ne suis pas entièrement sûr que c'est un Netbeans bug ou pas.
Peut l'affirmer ligne être supprimé parce que j'ai spécifié l' @Non annotation ?
Comme je le comprends, l'annotation est utilisée uniquement lors de l'analyse statique alors que dire, c'est, lorsqu'il est activé, active lors de l'exécution si les deux ne sont pas d'alternative.
source d'informationauteur Gualtiero Testa
Vous devez vous connecter pour publier un commentaire.
L'assertion est évalué au moment de l'exécution, l'annotation permet de FindBugs attraper des problèmes lors de l'analyse avant l'exécution. Comme les chèques ne sont pas vraiment en conflit, vous pouvez garder tous les deux. Je pense qu'il serait ennuyeux si mon IDE m'a dit de supprimer l'affirmer.
Netbeans est droit. Si vous pensez qu'il peut avoir la valeur null: supprimer l'annotation. Si vous le connaissez peut pas enlever l'affirmer.
Si il n'y a AUCUNE chance que votre méthode pourrait être appelée avec une valeur nulle, alors
@Nonnull
annotation ne devrait pas être là.Comme vous l'avez dit, cette annotation n'est pas de faire quoi que ce soit au moment de l'exécution: il est uniquement utilisé par les IDEs et les outils d'analyse de code statique. Il ne garantit pas que les choses ne sont pas null.
Puisque c'est de cette méthode, nous pouvons nous assurer que annoté paramètre ne peut pas être null. Je pense que vous pouvez retirer cette affirmation.
Si NetBeans avertit de méthode publique, je pense qu'il a un problème. Je vous recommande de mettre affirmation.
Si vous vous sentez toujours que l'affirmation, en privé, cette méthode est nécessaire, je pense que vous pouvez utiliser bytecode injection.
Par exemple, voici un plugin maven pour injecter null vérifier. Désolé c'est mon projet personnel, mais cela fonctionne pour moi. Je pense que ça peut répondre à votre besoin.
https://github.com/KengoTODA/jsr305-maven-plugin
J'ai trouvé une autre solution, comme je pensais à mon IDE avertissements.
Au départ, j'ai senti que l'IDE a été mauvais. Je suis un paranoïaque programmeur, et que vous voulez avoir l'étiquette de la documentation & analyse statique ET un moment de l'exécution dans le cas que j'ai jamais utiliser de la réflexion, ou d'une autre JVM de langue ou de quelque chose qui n'est pas analysable de manière statique, alors j'ai pensé que c'était une erreur de me donner un avertissement et me dire la
assert(x != null)
déclaration n'était pas nécessaire.Mais ensuite j'ai pensé à la façon affirme peut être retiré, selon le statut de l'
-ea
drapeau passé à Java au moment de l'Exécution, et qu'à certains égards,assert
et@Nonnull
sont vraiment à la fois le développement vérifie seulement.S'avère, il y a un moment de l'exécution qui peut être inséré (Java 7+)
Objets.requireNonNull
qui lancera unNullPointerException
et ne peut être enlevé avec un-ea
affirmation. Je pense que je vais préférer cela à monassert(x != null); use(x);
modèle.