249 votes

Comment utiliser null dans un interrupteur

Integer i = ...

switch (i){
    case null:
        doSomething0();
        break;    
    }

Dans le code ci-dessus, je ne peux pas utiliser null dans l'instruction switch case. Comment puis-je le faire différemment ? Je ne peux pas utiliser default parce qu'ensuite je veux faire autre chose.

330voto

Jesper Points 65733

Cela n'est pas possible avec un switch en Java. Vérifiez que null avant le switch :

if (i == null) {
    doSomething0();
} else {
    switch (i) {
    case 1:
        // ...
        break;
    }
}

Vous ne pouvez pas utiliser des objets arbitraires dans switch déclarations * . La raison pour laquelle le compilateur ne se plaint pas à propos de switch (i) donde i est un Integer c'est parce que Java décompose automatiquement les Integer à un int . Comme assylias l'a déjà dit, l'unboxing va jeter un NullPointerException quand i es null .

* Depuis Java 7, vous pouvez utiliser String sur switch déclarations.

44voto

assylias Points 102015

switch(i) lancera une NullPointerException si i est nul, car il essaiera de décomposer l'Integer en un int. Donc case null qui se trouve être illégale, n'aurait jamais été atteinte de toute façon.

Vous devez vérifier que i n'est pas nul avant la fonction switch déclaration.

26voto

Shehzad Points 1377

Les documents de Java l'ont clairement indiqué :

L'interdiction d'utiliser null comme étiquette de commutation empêche d'écrire du code qui ne pourra jamais être exécuté. Si l'expression de commutation est d'un type de référence, tel qu'un type primitif encadré ou une énumération, une erreur d'exécution se produira si l'expression est évaluée à null au moment de l'exécution.

Vous devez vérifier la présence de nullité avant l'exécution de la déclaration Swithch.

if (i == null)

Voir La déclaration de Switch

case null: // will never be executed, therefore disallowed.

5voto

user714965 Points 14264

Vous devez faire un

if (i == null) {
   doSomething0();
} else {
   switch (i) {
   }
}

1voto

Nikita Beloglazov Points 10623

Vous ne pouvez pas. Vous pouvez utiliser des primitives (int, char, short, byte) et String (Strings en java 7 seulement) dans switch. Les primitives ne peuvent pas être null.
Vérifiez i en état séparé avant l'aiguillage.

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