Maison >Java >javaDidacticiel >Pourquoi l'instruction Switch de Java n'accepte-t-elle pas les variables apparemment constantes comme étiquettes de cas ?

Pourquoi l'instruction Switch de Java n'accepte-t-elle pas les variables apparemment constantes comme étiquettes de cas ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-10 15:44:10830parcourir

Why Doesn't Java's Switch Statement Accept Seemingly Constant Variables as Case Labels?

Confusion des expressions constantes de l'instruction Java Switch

En Java, une instruction switch nécessite des expressions constantes comme étiquettes de cas. Cependant, les développeurs rencontrent souvent des erreurs se plaignant d'expressions non constantes, même lorsqu'ils utilisent des variables apparemment constantes.

Considérez l'exemple suivant :

public abstract class Foo {
    public static final int BAR;
    public static final int BAZ;
    public static final int BAM;

    public static String lookup(int constant) {
        switch (constant) {
            case Foo.BAR: return "bar";
            case Foo.BAZ: return "baz";
            case Foo.BAM: return "bam";
            default: return "unknown";
        }
    }
}

Lors de la compilation de ce code, vous pouvez rencontrer un message "constant erreur "expression requise" sur chaque étiquette de cas.

Pourquoi les variables Foo.BAR ne sont-elles pas constante ?

Bien que les variables Foo.BAR soient effectivement constantes du point de vue de l'exécution, elles ne sont pas des « constantes au moment de la compilation » comme l'exige la spécification du langage Java (JLS). La section 15.28 du JLS définit une expression constante comme celle qui :

  • Fait référence à des types primitifs ou à une chaîne
  • Utilise uniquement des littéraux, des variables constantes et des parenthèses
  • Exclut opérateurs d'affectation, , -- et instanceof
  • N'inclut pas la conversion de type, sauf vers les primitives types ou String

Dans l'exemple ci-dessus, les variables Foo.BAR ne sont pas déclarées avec des initialiseurs explicites, elles ne sont donc pas considérées comme des constantes de compilation.

Solution :

Pour résoudre l'erreur, initialisez les variables Foo.BAR avec des expressions constantes au moment de la compilation :

public static final int BAR = 1;
public static final int BAZ = 2;
public static final int BAM = 3;

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