94 votes

Meilleur moyen de vérifier les valeurs nulles en Java ?

Avant d'appeler une fonction d'un objet, je dois vérifier si l'objet est nul, afin d'éviter de lancer un message de type NullPointerException .

Quelle est la meilleure façon de procéder ? J'ai envisagé ces méthodes.
Laquelle est la meilleure pratique de programmation pour Java ?

// Method 1
if (foo != null) {
    if (foo.bar()) {
        etc...
    }
}

// Method 2
if (foo != null ? foo.bar() : false) {
    etc...
}

// Method 3
try {
    if (foo.bar()) {
        etc...
    }
} catch (NullPointerException e) {
}

// Method 4 -- Would this work, or would it still call foo.bar()?
if (foo != null && foo.bar()) {
    etc...
}

4voto

forhadmethun Points 105

Depuis java 8, vous pouvez utiliser Objects.nonNull(Object obj)

if(nonNull(foo)){ 
//
}

2voto

DaveHowes Points 3597

Je dirais que la méthode 4 est l'idiome le plus général du code que j'ai examiné. Mais cela me semble toujours un peu malodorant. Elle suppose que foo == null est la même chose que foo.bar() == false.

Ça ne me semble pas toujours juste.

2voto

aglassman Points 2119

La méthode 4 est ma méthode préférée. Le circuit court de l'opérateur && rend le code le plus lisible. La méthode 3, Catching NullPointerException, est désapprouvée la plupart du temps alors qu'une simple vérification de nullité suffirait.

2voto

Jay Eskandarian Points 43

Comme d'autres l'ont dit, la méthode n° 4 est la meilleure lorsqu'on n'utilise pas une méthode de bibliothèque. Cependant, vous devriez toujours mettre null du côté gauche de la comparaison pour vous assurer que vous n'assignez pas accidentellement null à foo en cas de faute de frappe. Dans ce cas, le compilateur détectera l'erreur.

// You meant to do this
if(foo != null){

// But you made a typo like this which will always evaluate to true
if(foo = null)

// Do the comparison in this way
if(null != foo)

// So if you make the mistake in this way the compiler will catch it
if(null = foo){

// obviously the typo is less obvious when doing an equality comparison but it's a good habit either way
if(foo == null){
if(foo =  null){

2voto

Kishore Points 29

Correction : Ceci n'est vrai que pour C/C++, pas pour Java, désolé.

Si vous voulez vérifier avec un double égal "==", alors vérifiez la nullité avec la référence de l'objet.

if(null == obj) 

au lieu de

if(obj == null)

parce que si vous faites une erreur en tapant if(obj = null), il retournera true (l'assignation de l'objet retourne le succès (qui est 'true' en valeur).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X