Heim > Java > javaLernprogramm > Warum akzeptiert die Switch-Anweisung von Java keine scheinbar konstanten Variablen als Fallbezeichnungen?

Warum akzeptiert die Switch-Anweisung von Java keine scheinbar konstanten Variablen als Fallbezeichnungen?

Linda Hamilton
Freigeben: 2024-12-10 15:44:10
Original
834 Leute haben es durchsucht

Why Doesn't Java's Switch Statement Accept Seemingly Constant Variables as Case Labels?

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";
        }
    }
}
Nach dem Login kopieren

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:

  • Bezieht sich auf primitive Typen oder String
  • Nur ​​Literale, konstante Variablen und Klammern verwendet
  • Ausgeschlossen Zuweisungsoperatoren, , -- und Instanz von
  • Beinhaltet keine Typumwandlung außer in primitive Typen oder String

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage