Maison >Java >javaDidacticiel >Pourquoi Findbugs signale-t-il les instructions Break omises dans les instructions Java Switch ?

Pourquoi Findbugs signale-t-il les instructions Break omises dans les instructions Java Switch ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-29 11:42:02771parcourir

  Why Does Findbugs Flag Omitted Break Statements in Java Switch Statements?

Instructions Switch : les dangers des pauses omises

En Java, les instructions switch offrent un moyen pratique de gérer plusieurs options de cas. Cependant, l'omission des instructions break peut entraîner des erreurs subtiles et un comportement inattendu. Findbugs, un outil d'analyse statique, signale de telles occurrences, signalant les erreurs lorsqu'un cas "passe" au suivant.

Considérez le code suivant :

<code class="java">switch(x) {

    case 0:
        // code

    case 1:
        // code

    case 2:
        // code
}</code>

Findbugs génère spécifiquement une erreur sur la deuxième déclaration de cas. En effet, en l'absence d'instruction break, l'exécution passe aux cas suivants après l'exécution du code du cas en cours.

Pour mieux comprendre ce comportement, examinons un exemple :

<code class="java">switch (foo) {
    case 0:
        doSomething();
    case 1:
        doSomethingElse();
    default:
        doSomeOtherThing();
}</code>

Si foo vaut 0, les trois fonctions doSomething, doSomethingElse et doSomeOtherThing seront exécutées dans cet ordre. Cependant, si foo vaut 1, seuls doSomethingElse et doSomeOtherThing s'exécuteront. Ce comportement peut ne pas refléter la logique prévue.

En revanche, l'ajout d'instructions break à chaque cas garantit que seule la fonction prévue est exécutée :

<code class="java">switch (foo) {
    case 0:
        doSomething();
        break;
    case 1:
        doSomethingElse();
        break;
    default:
        doSomeOtherThing();
        break;
}</code>

Dans ce code, une seule fonction sera être exécuté en fonction de la valeur de foo.

Des outils tels que l'indicateur Findbugs ont omis les pauses pour mettre en évidence les erreurs potentielles et garantir le comportement prévu des instructions switch. Cependant, dans certains cas, il est acceptable d'omettre les ruptures lorsque plusieurs cas représentent une plage contiguë de valeurs avec des conséquences identiques :

<code class="java">switch (foo) {
    case 0:
    case 1:
        doSomething();
        break;
    case 2:
        doSomethingElse();
        break;
    default:
        doSomeOtherThing();
        break;
}</code>

Ce code appelle intentionnellement doSomething lorsque foo vaut 0 ou 1. La plupart des outils d'analyse ne signalerait pas cela comme une erreur puisqu'il n'y a pas de code intermédiaire entre les cas.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn