IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Java : découvrez trois astuces pour éviter les NullPointerException
Et rendre votre programme plus robuste, par Gugelhupf

Le , par Gugelhupf

0PARTAGES

Une NullPointerException est une exception générée lorsque vous utilisez un objet qui n'est pas initialisé. Fort heureusement, c'est un type d'exception que nous pouvons facilement éviter.

Dans cet article, je vais vous montrer trois petites astuces pour éviter cette exception et rendre votre programme plus robuste.

Note: vous verrez ci-dessous un tableau à quatre colonnes, n'hésitez pas à utiliser votre curseur pour lire le contenu de la dernière colonne.



Cas
Code pouvant générer une exception
Astuce pour éviter l'exception
Description de l'astuce


Vérification des paramètres en entrée de méthode
void method(String param1, String param2) {
//
// Les paramètres en entrée
// n'ont pas été testés.
//
//
// Ils peuvent générer une
// exception dans le noyau de l'API.
//
System.out.printf(
"%s %s",
param1.trim(),
param2.trim()
);
}
void method(String param1, String param2) {
Objects.requireNonNull(
param1,
"``param1` ne doit pas être null"
);
Objects.requireNonNull(
param2,
"``param2` ne doit pas être null"
);
System.out.printf(
"%s %s",
param1.trim(),
param2.trim()
);
}
La méthode Objects#requireNonNull(Object, String), introduite avec Java 7, lance une NullPointerException avant même que ce soit la JVM qui la détecte. C'est une technique de programmation défensive, cela vous permet en tant que créateur d'une API de lancer une exception à partir de la couche la plus haute que vous exposez à vos clients. L'exception ne sera donc pas générée à partir du noyau de votre API et vous éviterez ainsi de faire perdre du temps à vos clients en débogage.


Comparaison avec une instance qui ne peut pas être null
String s1 = null;

if (s1.equals("LABEL")) {

}
String s1 = null;

if ("LABEL".equals(s1)) {

}
Bien que cette syntaxe d'Object#equals() puisse ne pas vous paraitre «instinctive», elle vous évitera NullPointerException à coup sûr


Utilisation des listes
public List method() {
return null;
}
public List method() {
return new ArrayList<>();
}
Lorsque votre méthode retourne une liste d'éléments ou tout autre type de container (Collection, Map ...), faites en sorte de toujours retourner une liste vide au lieu de null si vous n'avez pas d'éléments. Vous éviterez ainsi d'avoir inutilement à tester vos listes avec un if avant de faire un for-each ou Collection#stream() ou Collection#iterator()



N'hésitez pas à lire mon article sur l'utilisation d'Optional pour éviter d'utiliser explicitement le mot-clé null.

N'hésitez pas à lire les tutoriels de programmation orientée contrat et programmation défensive :

Vous avez lu gratuitement 745 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !