Во-первых, я скажу, что я гораздо лучше знаком с перечислениями в C #, и кажется, что перечисления в Java - довольно беспорядок.
Как вы можете видеть, я пытаюсь использовать оператор switch @ enums в моем следующем примере, но я всегда получаю ошибку, независимо от того, что я делаю.
Я получаю ошибку:
Квалифицированная метка регистра
SomeClass.AnotherClass.MyEnum.VALUE_A
должна быть заменена неквалифицированной константой enumVALUE_A
Дело в том , я совсем понимаю ошибку , но я не могу просто написать VALUE_A , так как перечисление находится в другом подклассе. Есть ли способ решить эту проблему? И почему это происходит на 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
источник
источник
Enum
являются чрезвычайно удобно , как только вы получите повесить их - вовсе не беспорядок. Они гораздо более гибкие и практичные, чем простые перечисления (просто помеченные целочисленные значения), как это видно на других платформах. Смотрите руководство по Oracle . Откройте для себя оптимизированныеSet
/Map
реализации:EnumSet
&EnumMap
.Ответы:
Измените это на это:
Подсказка в ошибке. Вам не нужно квалифицировать
case
метки с типом enum, только его значение.источник
Java автоматически определяет тип элементов
case
, поэтому метки должны быть неквалифицированными.источник
MyEnum
что не имело бы смысла.static final int MY_CONST = 7; …; switch(intVariable) {case MY_CONST: …;}
вместоcase 7
. Таким образом, это ограничение для перечислений не имеет смысла (я могу использовать не только первичные литералы, но и определенные вручную константы для целочисленногоswitch
выражения, но я не могу использовать определяемые вручную константы, но только основные имена для перечислений).это должно сделать:
источник
Неправильно:
Правильно:
источник
Вот как я это использую. И это работает фантастически -
И
switch-case
как показано нижеисточник
Напишите
someMethod()
так:В операторе switch вы должны использовать только имя константы.
источник