Instruction Java Switch : Dépannage de l'exigence d'expression constante
Dans le scénario présenté, une instruction switch tente de faire correspondre une constante entière avec des constantes statiques définies dans une classe abstraite. Cependant, la compilation échoue avec une erreur « expression constante requise ».
Naturellement, les expressions constantes au moment de la compilation sont nécessaires pour les instructions switch. Pourtant, les constantes Foo.BAR, Foo.BAZ et Foo.BAM semblent constantes.
Pourquoi ces constantes ne sont-elles pas traitées comme des expressions constantes au moment de la compilation ?
Selon la spécification du langage Java (JLS) §15.28, une expression constante de compilation se compose uniquement de certains types primitifs et littéraux, à l'exclusion des références d'objet. Dans ce cas, Foo.BAR n'est pas une expression constante au moment de la compilation car elle fait référence à un champ statique, qui est initialisé au moment de l'exécution et non au moment de la compilation.
Résoudre le problème :
Pour résoudre ce problème, les variables Foo.BA* doivent être initialisées avec des expressions constantes à la compilation :
public abstract class Foo { ... public static final int BAR = 1; public static final int BAZ = 2; public static final int BAM = 3; ... }
Avec ces initialiseurs, le compilateur peut déterminer les valeurs de Foo.BA* au moment de la compilation, les rendant valides pour une utilisation dans une instruction switch.
Approche alternative utilisant des énumérations :
Une autre option pour garantir des valeurs constantes au moment de la compilation consiste à utiliser des énumérations :
public enum FooConstants { BAR, BAZ, BAM }
Cependant, l'utilisation d'énumérations impose des restrictions supplémentaires, telles que comme exigeant un cas par défaut et interdisant les étiquettes de cas qui s'évaluent en expressions.
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!