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
Libérer: 2024-12-10 15:44:10
original
870 Les gens l'ont consulté

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";
        }
    }
}
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal