Bonjour,
En passant du JDK 6 au 7, j'ai fait l'effort de remplacer tous mes Validate.assertNotNull() (d'apache commons) qui vérifiaient les paramètres des méthodes publiques que j'exposais par des Objects.requireNotNull().
Aujourd'hui, en arrivant au JDK 8, je suis incité à employer l'annotation javax.annotation.Nonnull.
Mais j'ai deux problèmes :
1) import javax.annotation.Nonnull n'est pas reconnu.
Je n'arrive pas à comprendre comment faire pour que cela compile et surtout, pour que cela s'enclenche ensuite.
- Dans mon projet Maven, je rajoute quelle dépendance pour qu'il complète le package javax.annotation avec cette nouvelle annotation ?
Je lis parfois des messages sur Internet qui disent que je devrais intégrer un "jsr305-2.0.1.jar" dans mon projet, mais le comment n'est pas très clair.
- Comment enclencher cette vérification (qui à l'air compile time seulement) ? C'est un paramètre supplémentaire à passer dans l'ordre javac de compilation ? Il faut modifier le "javac" employé pour lancer les compilation dans le projet Maven également ?
2) Du coup, j'enlève vraiment mes Objects.requireNotNull() ?
À l'exécution, dès qu'il y aura une valeur null qui transitera – via un paramètre null venu de l'extérieur (d'un web-service par exemple ou d'une base de données) – ça ne pourra quand même que planter ?!
Ou bien la bonne pratique c'est :
? Dans ce cas là, c'est un peu redondant, mais s'il faut en passer par là...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public void maMethode(@Nonnull Parametre p) { Objects.requireNonNull(p); int x = p.getMaValeur(); ... }
Mon prérequis, c'est de n'avoir aucune valeur nulle à l'exécution. Il ne faut jamais que je me retrouve dans la situation où un @Nonnull aurait été accolé à un paramètre et qu'à l'exécution un null passe entre les filets et arrive aux instructions. Sinon, j'aurai dégradé mon code.
Or, j'ai l'impression que la vérification en compile time ne pourra jamais garantir cela. Je réfléchis, mais je ne vois pas comment.
Merci pour vos avis et de votre assistance,
Grunt.
Partager