L’exception NullPointerException est l’une des erreurs les plus courantes dans le développement des applications Java, elle est levée lorsqu’une variable de référence est accédée et ne pointe vers aucun objet. Ce problème n’est pas entièrement une erreur de syntaxe, il est donc parfois difficile d’identifier le problème.
Qu’est-ce que NullPointerException ?
L’exception NullPointerException est l’une des nombreuses exceptions prises en charge par le langage Java. Elle indique qu’une démarche a été faite pour avoir accès à une variable de référence qui pointe actuellement vers Null. Null est la valeur par défaut en Java attribuée aux variables qui ne sont pas initialisées par l’utilisateur après ou avec une déclaration.
Comment corriger l’erreur java.lang.NullPointerException ?
Il est facile de créer une exception liée à un pointeur nul, mais il est plus difficile de l’éviter ou de la corriger. Alors que certains environnements de développement intégrés (IDE) vous avertissent si vous accédez à une variable avant de l’initialiser avec une valeur compatible, la plupart des d’entre eux ne peuvent pas s’en rendre compte dans des situations complexes, comme lorsqu’une variable est passée par plusieurs appels de méthode. La solution exacte à une exception de pointeur nul dépend de votre situation et de votre code. Voici quelques-unes des meilleures façons de résoudre les scénarios courants de pointeurs nuls :
Vérifiez que votre code ne contient pas d’erreurs manuelles
L’erreur humaine est la principale raison pour laquelle les exceptions liées aux pointeurs nuls se produisent. Assurez-vous que le programme que vous avez écrit suit la logique correcte que vous aviez initialement prévue. Parcourez également le code source pour vérifier que vous n’avez pas oublié d’instructions ou mal orthographié des variables, ce qui pourrait empêcher l’attribution d’une valeur à une variable.
Assurez-vous que vous avez écrit votre code comme votre logique vous l’indique, et que vous n’avez pas omis d’écrire des déclarations, ou que vous n’avez pas assigné des objets à de mauvaises références. En règle générale, vérifiez qu’avant toute utilisation d’une variable, celle-ci est initialisée avec un objet.
Placez des contrôles de sécurité autour du code qui pourrait provoquer une erreur NullPointerException
Si vous connaissez la ligne de code à l’origine de votre NullPointer et que vous pensez que votre logique est correcte, vous pouvez envelopper la section de code dans un bloc try-catch et définir le comportement à adopter lorsqu’un NullPointer est détecté. Voici à quoi ressemblera une telle configuration :
Cela se produit dans les situations où une certaine variable de référence peut ou non contenir des nullités. Le plus souvent, les réponses aux API distantes et aux interfaces de périphériques sont sujettes à ce scénario. L’utilisation de contrôles de sécurité est la meilleure solution pour gérer ces situations.
Vérifier la présence de Null avant d’accéder à quelque chose
Cette méthode est similaire à la méthode try-catch. Dans cette méthode, un bloc ‘if’ est utilisé pour vérifier l’absence de valeurs nulles avant d’accéder à une variable. Voici à quoi ressemblerait le bout de code précédent si un bloc “if” était utilisé pour détecter l’erreur :
La plus grande différence entre les deux méthodes est l’étendue des vérifications qu’elles effectuent. La méthode if vérifie que la variable myVar ne contient pas de valeurs nulles, tandis que le bloc try-catch récupère toutes les variables qui sont nulles.
Le bloc “if” est donc une approche plus ciblée et plus propre pour prendre en compte les pointeurs nuls dans votre logique applicative. Toutefois, si plusieurs variables sont susceptibles d’être nulles, il est préférable d’utiliser un bloc try-catch pour plus de simplicité.
Utiliser un opérateur ternaire
L’opérateur ternaire donne la valeur du côté gauche si elle n’est pas nulle, sinon le côté droit est évalué. Sa syntaxe est la suivante :
Si l’expression est évaluée comme vraie, l’expression entière renvoie la valeur 1, sinon la valeur 2.
Cela ressemble plus à une construction if-else mais c’est plus efficace et expressif. Pour éviter les NullPointerException (NPE), utilisez cet opérateur comme le code ci-dessous :
Utiliser Apache Commons StringUtils pour les opérations sur les chaînes de caractères
Apache Commons Lang est une collection de plusieurs classes utilitaires pour divers types d’opérations. L’une d’entre elles est StringUtils.java.
Utilisez les méthodes suivantes pour mieux gérer les chaînes de caractères dans votre code.
- StringUtils.isNotEmpty()
- StringUtils. IsEmpty()
- StringUtils.equals()
Considérer les primitives au lieu des objets
Un problème de nullité se produit lorsque les références d’un objet ne pointent vers rien. Il est donc toujours prudent d’utiliser des primitives. Envisagez d’utiliser des primitives si nécessaire car elles ne souffrent pas de références nulles.
Toutes les primitives ont une valeur par défaut qui leur est attribuée, alors soyez prudent.
Utiliser valueOf() à la place de toString()
Si vous devriez imprimer la représentation sous forme de chaîne de caractères d’un objet, il est préférable de ne pas utiliser la méthode toString(). C’est une cible très facile pour les NPE.
Utilisez plutôt String.valueOf(object). Même si l’objet est nul dans ce cas, il ne donnera pas d’exception et imprimera ‘null’ sur le flux de sortie.