Pourquoi est un if / else if / else pour un booléen simple ne donnant pas une erreur de «code inaccessible»

Pourquoi ce code ne génère-t-il pas d’erreur de “code inaccessible“? Comme un booléen ne peut être vrai ou faux.

public static void main(Ssortingng args[]) { boolean a = false; if (a == true) { } else if (a == false) { } else { int c = 0; c = c + 1; } } 

    De JLS 14.21. Déclarations inaccessibles

    C’est une erreur de compilation si une instruction ne peut pas être exécutée car elle est inaccessible.

    et

    L’instruction else est accessible si l’instruction if-then-else est accessible.

    Votre instruction if-then-else est accessible. Donc, par la définition, le compilateur pense que l’instruction else est accessible.

    Remarque: il est intéressant de noter que le code suivant comstack également

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

    Ce n’est pas vrai pour while

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

    car la définition de l’accessibilité pour while est différente (emphase sur la mienne):

    L’instruction contenue est accessible si l’instruction while est accessible et si l’expression de condition n’est pas une expression constante dont la valeur est false .

    En ce qui concerne le compilateur, il ne génère qu’une erreur de code inaccessible s’il est possible de laisser la scope de la méthode sans qu’EVER n’exécute une partie du code. Dans votre cas, oui, le bloc else ne sera jamais exécuté, mais s’attendre à ce que le compilateur affiche une erreur ici, c’est comme s’attendre à ce que le compilateur débogue votre code en vue d’éventuelles erreurs logiques. Prenez le code suivant comme 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 }