Heim > Java > javaLernprogramm > Warum akzeptiert meine Java-Switch-Anweisung keine statischen Konstanten aus einer abstrakten Klasse?

Warum akzeptiert meine Java-Switch-Anweisung keine statischen Konstanten aus einer abstrakten Klasse?

Patricia Arquette
Freigeben: 2024-12-19 21:29:13
Original
891 Leute haben es durchsucht

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

Java Switch-Anweisung: Fehlerbehebung bei Anforderungen an konstante Ausdrücke

Im dargestellten Szenario versucht eine Switch-Anweisung, eine ganzzahlige Konstante mit definierten statischen Konstanten abzugleichen in einer abstrakten Klasse. Die Kompilierung schlägt jedoch mit der Fehlermeldung „Konstanter Ausdruck erforderlich“ fehl.

Verständlicherweise sind für Switch-Anweisungen konstante Ausdrücke zur Kompilierungszeit erforderlich. Dennoch scheinen die Konstanten Foo.BAR, Foo.BAZ und Foo.BAM konstant zu sein.

Warum werden diese Konstanten nicht als konstante Ausdrücke zur Kompilierungszeit behandelt?

Gemäß der Java Language Specification (JLS) §15.28 besteht ein konstanter Ausdruck zur Kompilierungszeit nur aus bestimmten primitiven Typen und Literalen, ausgenommen Objektreferenzen. In diesem Fall ist Foo.BAR kein konstanter Ausdruck zur Kompilierungszeit, da er sich auf ein statisches Feld bezieht, das zur Laufzeit und nicht zur Kompilierungszeit initialisiert wird.

Behebung des Problems:

Um dieses Problem zu beheben, müssen die Foo.BA*-Variablen mit konstanten Ausdrücken zur Kompilierungszeit initialisiert werden:

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

Mit diesen Initialisierer kann der Compiler die Werte von Foo.BA* zur Kompilierungszeit ermitteln und sie für die Verwendung in einer Switch-Anweisung gültig machen.

Alternativer Ansatz mit Aufzählungen:

Eine weitere Möglichkeit, konstante Werte zur Kompilierungszeit sicherzustellen, ist die Verwendung von Enumerationen:

public enum FooConstants {
    BAR,
    BAZ,
    BAM
}
Nach dem Login kopieren

Die Verwendung von Enumerationen ist jedoch mit einigen Einschränkungen verbunden Zusätzliche Einschränkungen, wie z. B. das Erfordernis einer Standard-Groß-/Kleinschreibung und das Verbot von Groß-/Kleinschreibungsbeschriftungen, die zu Ausdrücken ausgewertet werden.

Das obige ist der detaillierte Inhalt vonWarum akzeptiert meine Java-Switch-Anweisung keine statischen Konstanten aus einer abstrakten Klasse?. 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