Maison > Java > javaDidacticiel > Pourquoi mon instruction Java Switch n'accepte-t-elle pas les constantes statiques d'une classe abstraite ?

Pourquoi mon instruction Java Switch n'accepte-t-elle pas les constantes statiques d'une classe abstraite ?

Patricia Arquette
Libérer: 2024-12-19 21:29:13
original
889 Les gens l'ont consulté

Why Doesn't My Java Switch Statement Accept Static Constants from an Abstract Class?

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

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

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!

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