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...
}

128voto

Jared Nielsen Points 910

La méthode 4 est la meilleure.

if(foo != null && foo.bar()) {
   someStuff();
}

utilisera évaluation des courts-circuits c'est-à-dire qu'il se termine si la première condition d'un logical AND est fausse.

16voto

Le dernier et le meilleur, à savoir LOGIQUE ET

  if (foo != null && foo.bar()) {
    etc...
}

Parce qu'en toute logique &&

il n'est pas nécessaire de savoir quel est le côté droit, le résultat doit être faux

Préférez lire : Court-circuitage de l'opérateur logique Java

5voto

Vivin Paliath Points 40975
  • Ne pas attraper NullPointerException . C'est une mauvaise pratique. Il est préférable de s'assurer que la valeur n'est pas nulle.
  • La méthode n°4 vous conviendra. Elle n'évaluera pas la deuxième condition, car Java dispose du court-circuitage (c'est-à-dire que les conditions suivantes ne seront pas évaluées si elles ne modifient pas le résultat final de l'expression booléenne). Dans ce cas, si la première expression d'un ET logique est évaluée à false, les expressions suivantes n'ont pas besoin d'être évaluées.

5voto

wobblycogs Points 1474

La méthode 4 est de loin la meilleure car elle indique clairement ce qui va se passer et utilise un minimum de code.

La méthode 3 est tout simplement fausse à tous les niveaux. Vous savez que l'élément peut être nul, ce n'est donc pas une situation exceptionnelle, c'est quelque chose que vous devez vérifier.

La méthode 2 ne fait que rendre les choses plus compliquées qu'elles ne doivent l'être.

La méthode 1 est juste la méthode 4 avec une ligne de code supplémentaire.

4voto

KrishPrabakar Points 175

Sur Java 7 vous pouvez utiliser Objects.requireNonNull() . Ajouter une importation de Objects classe de java.util .

public class FooClass {
    //...
    public void acceptFoo(Foo obj) {
        //If obj is null, NPE is thrown
        Objects.requireNonNull(obj).bar(); //or better requireNonNull(obj, "obj is null");
    }
    //...
}

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