Heim >Java >javaLernprogramm >Warum löst meine Java-Switch-Anweisung bei der Verwendung statischer Konstanten den Fehler „Konstantenausdruck erforderlich' aus?

Warum löst meine Java-Switch-Anweisung bei der Verwendung statischer Konstanten den Fehler „Konstantenausdruck erforderlich' aus?

DDD
DDDOriginal
2024-12-08 17:59:12618Durchsuche

Why Does My Java Switch Statement Throw a

Java-Switch-Anweisung: Unerwarteter Fehler beim Konstantenausdruck bei Verwendung statischer Konstanten

Beim Arbeiten mit Java-Switch-Anweisungen ist es wichtig sicherzustellen, dass die in den Groß-/Kleinschreibung verwendeten Ausdrücke verwendet werden sind konstante Ausdrücke. Konstante Ausdrücke sind Ausdrücke, die zur Kompilierzeit ausgewertet werden und einen konstanten Wert erzeugen. Dies ist notwendig, da der Compiler den genauen Wert des Ausdrucks kennen muss, um zu bestimmen, welcher Fall ausgeführt werden soll.

Im folgenden Beispiel haben wir eine Klasse mit drei statischen Konstanten:

public abstract class Foo {
    ...
    public static final int BAR;
    public static final int BAZ;
    public static final int BAM;
    ...
}

Wir haben dann eine Methode, die eine Switch-Anweisung verwendet, um eine relevante Zeichenfolge basierend auf der Konstante abzurufen:

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";
    }
}

Wenn wir jedoch versuchen, diesen Code zu kompilieren, erhalten wir eine Konstanter Ausdruck erforderlich. Fehler bei jeder der drei Fallbezeichnungen. Dies liegt daran, dass die Konstanten zwar aus Sicht jedes Codes, der nach der Initialisierung der Felder ausgeführt wird, konstant sind, es sich jedoch nicht um Kompilierzeitkonstanten im Sinne der Java Language Specification (JLS) handelt.

Konkret definiert JLS einen konstanten Ausdruck als einen Ausdruck, der zur Kompilierungszeit ausgewertet werden kann, um einen konstanten Wert zu erzeugen. Das bedeutet, dass der Ausdruck keine Variablen enthalten darf, die nicht selbst konstant sind, oder Operationen, die nicht selbst konstant sind.

In unserem Beispiel sind die Foo.BA*-Konstanten keine Kompilierungszeitkonstanten, da sie keine Konstanten haben Initialisierer. Um dies zu beheben, können wir die Konstanten einfach mit Konstantenausdrücken zur Kompilierungszeit initialisieren:

public abstract class Foo {
    ...
    public static final int BAR = 1;
    public static final int BAZ = 2;
    public static final int BAM = 3;
    ...
}

Wenn wir nun den Code kompilieren, sollte er erfolgreich kompiliert werden.

Es ist auch wichtig zu beachten dass Aufzählungen anstelle von int-Konstanten in einer Switch-Anweisung verwendet werden können. Allerdings unterliegen Aufzählungen einigen Einschränkungen, die für Int-Konstanten nicht gelten. Beispielsweise müssen Aufzählungen eine Standard-Groß-/Kleinschreibung haben, auch wenn Sie für jeden bekannten Wert der Aufzählung eine Groß-/Kleinschreibung haben. Außerdem müssen die Fallbezeichnungen alle explizite Aufzählungswerte sein, keine Ausdrücke, die zu Aufzählungswerten ausgewertet werden.

Das obige ist der detaillierte Inhalt vonWarum löst meine Java-Switch-Anweisung bei der Verwendung statischer Konstanten den Fehler „Konstantenausdruck erforderlich' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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