59 votes

Pourquoi un if/else if/else pour un simple booléen ne donnant pas une "inaccessible" code d'erreur

Pourquoi ce code ne donnant pas une "inaccessible" code d'erreur? Depuis un booléen ne peut être vrai ou faux.

public static void main(String args[]) {
    boolean a = false;
    if (a == true) {

    } else if (a == false) {

    } else {
        int c = 0;
        c = c + 1;
    }
}

59voto

dejvuth Points 2111

De JLS 14.21. Inaccessible États

C'est une erreur de compilation si un énoncé ne peut pas être exécutée parce qu'elle est inaccessible.

et

Le reste-la déclaration est accessible ssi le if-then-else est accessible.

Votre if-then-else est accessible. Ainsi, de par la définition du compilateur pense que le reste-la déclaration est accessible.

Remarque: il est Intéressant de noter le code suivant compile également

// This is ok
if (false) { /* do something */ }

Ce n'est pas vrai pour while

// This will not compile
while (false) { /* do something */ }

parce que la définition de l'accessibilité pour l' while est différent (l'emphase est mienne):

Le contenu de l'énoncé est accessible iff l'instruction while est accessible et l'expression de condition n'est pas une expression constante dont la valeur est false.

-7voto

Shababb Karim Points 60

Aussi loin que le compilateur est concernée, elle ne donne inaccessible code d'erreur si il y a une possibilité de laisser la portée de la méthode sans JAMAIS l'exécution d'une partie du code. Dans votre cas, oui, l' else bloc ne sera jamais exécuté, mais attend le compilateur pour afficher une erreur ici, c'est comme attendre le compilateur pour déboguer votre code pour d'éventuelles erreurs logiques. Prenez le code suivant à titre d'exemple.

public static boolean method()
{
    boolean flag = false;
    if(flag == true)
    {
        return true;
    }
    else if(flag == false)
    {
        return false;
    }
    else
    {
        return true & false; //comment in this line to get error
    }


    //return true | false; comment out this line to get error
}

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