Zuerst werde ich sagen, dass ich mit Enums in C # viel besser vertraut bin und es scheint, dass Enums in Java ein ziemliches Durcheinander sind.
Wie Sie sehen können, versuche ich in meinem nächsten Beispiel, eine switch-Anweisung @ enums zu verwenden, aber ich erhalte immer eine Fehlermeldung, egal was ich tue.
Der Fehler, den ich erhalte, ist:
Das qualifizierte Falletikett
SomeClass.AnotherClass.MyEnum.VALUE_A
muss durch die nicht qualifizierte Enum-Konstante ersetzt werdenVALUE_A
Die Sache ist, dass ich den Fehler ziemlich verstehe, aber ich kann nicht einfach VALUE_A schreiben, da sich die Aufzählung in einer anderen Unterklasse befindet. Gibt es eine Möglichkeit, dieses Problem zu lösen? Und warum passiert das in Java?
//Main Class
public class SomeClass {
//Sub-Class
public static class AnotherClass {
public enum MyEnum {
VALUE_A, VALUE_B
}
public MyEnum myEnum;
}
public void someMethod() {
MyEnum enumExample //...
switch (enumExample) {
case AnotherClass.MyEnum.VALUE_A: { <-- error on this line
//..
break;
}
}
}
}
java
enums
switch-statement
Popokoko
quelle
quelle
Enum
ist äußerst praktisch , wenn man den Dreh von ihnen bekommen - nicht alle ein Chaos an. Sie sind viel flexibler und praktischer als einfache Aufzählungen (lediglich ein beschrifteter ganzzahliger Wert), wie sie auf anderen Plattformen zu sehen sind. Siehe das Oracle-Tutorial . Entdecken Sie die optimiertenSet
/Map
Implementierungen:EnumSet
&EnumMap
.Antworten:
Ändern Sie es in dieses:
Der Hinweis liegt im Fehler. Sie müssen keine
case
Beschriftungen mit dem Aufzählungstyp qualifizieren, sondern nur dessen Wert.quelle
Java leitet automatisch den Typ der Elemente ab
case
, sodass die Beschriftungen nicht qualifiziert werden müssen.quelle
MyEnum
das keinen Sinn ergibt.static final int MY_CONST = 7; …; switch(intVariable) {case MY_CONST: …;}
stattcase 7
. Diese Einschränkung für Aufzählungen macht also keinen Sinn (ich kann nicht nur Primärliterale, sondern auch manuell definierte Konstanten für den ganzzahligenswitch
Ausdruck verwenden, aber ich kann keine manuell definierten Konstanten verwenden, sondern nur Primärnamen für Aufzählungen).das sollte reichen:
quelle
Falsch:
Recht:
quelle
So benutze ich es. Und es funktioniert fantastisch -
Und das
switch-case
wie unten gezeigtquelle
Schreiben Sie folgendermaßen
someMethod()
:In der switch-Anweisung dürfen Sie nur den Konstantennamen verwenden.
quelle