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 :
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!