Verwirrung durch konstante Ausdrücke in der Java-Switch-Anweisung
In Java erfordert eine Switch-Anweisung konstante Ausdrücke als Fallbezeichnungen. Allerdings stoßen Entwickler oft auf Fehler, die sich über nicht konstante Ausdrücke beschweren, selbst wenn sie scheinbar konstante Variablen verwenden.
Betrachten Sie das folgende Beispiel:
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"; } } }
Beim Kompilieren dieses Codes stoßen Sie möglicherweise auf eine „Konstante“. Ausdruck erforderlich“-Fehler auf jeder Fallbeschriftung.
Warum sind keine Foo.BAR-Variablen? konstant?
Während Foo.BAR-Variablen aus Ausführungssicht effektiv konstant sind, handelt es sich nicht um „Konstanten zur Kompilierungszeit“, wie in der Java Language Specification (JLS) gefordert. Abschnitt 15.28 des JLS definiert einen konstanten Ausdruck als einen, der:
Im obigen Beispiel werden Foo.BAR-Variablen nicht mit expliziten Initialisierern deklariert, daher qualifizieren sie sich nicht als Konstanten zur Kompilierungszeit.
Lösung:
Um den Fehler zu beheben, initialisieren Sie die Foo.BAR-Variablen mit konstanten Ausdrücken zur Kompilierungszeit:
public static final int BAR = 1; public static final int BAZ = 2; public static final int BAM = 3;
Das obige ist der detaillierte Inhalt vonWarum akzeptiert die Switch-Anweisung von Java keine scheinbar konstanten Variablen als Fallbezeichnungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!