Java Language Pitfall - Manquer un "break" dans un cas de "switch"


Exemple

Ces problèmes de Java peuvent être très embarrassants et restent parfois inexplorés jusqu’à la production. Un comportement irréversible dans les instructions de commutation est souvent utile. Cependant, l'absence d'un mot-clé «pause» lorsqu'un tel comportement n'est pas souhaité peut entraîner des résultats désastreux. Si vous avez oublié de mettre un «break» dans «case 0» dans l'exemple de code ci-dessous, le programme écrira «Zero» suivi de «One», car le flux de contrôle à l'intérieur il atteint une «pause». Par exemple:

public static void switchCasePrimer() {
        int caseIndex = 0;
        switch (caseIndex) {
            case 0:
                System.out.println("Zero");
            case 1:
                System.out.println("One");
                break;
            case 2:
                System.out.println("Two");
                break;
            default:
                System.out.println("Default");
        }
}

Dans la plupart des cas, la solution la plus propre consisterait à utiliser des interfaces et à déplacer le code avec un comportement spécifique dans des implémentations distinctes ( composition sur héritage )

Si une instruction switch est inévitable, il est recommandé de documenter les retombées "attendues" si elles se produisent. De cette façon, vous montrez aux autres développeurs que vous êtes au courant de la rupture manquante et que cela est un comportement attendu.

switch(caseIndex) {
    [...]
    case 2:
        System.out.println("Two");
        // fallthrough
    default:
        System.out.println("Default");