Java: использование оператора switch с перечислением в подклассе
сначала я скажу, что я гораздо более знаком с перечислениями в C#, и кажется, что перечисления в java довольно беспорядок.
как вы можете видеть, я пытаюсь использовать оператор switch @ enums в моем следующем примере, но я всегда получаю ошибку независимо от того, что я делаю.
ошибка, которую я получаю:
квалифицированный ярлык случая
SomeClass.AnotherClass.MyEnum.VALUE_A
необходимо заменить на неквалифицированную константу перечисленияVALUE_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;
}
}
}
}
5 ответов
измените его на это:
switch (enumExample) {
case VALUE_A: {
//..
break;
}
}
ключ находится в ошибке. Вам не нужно квалифицироваться case
метки с типом перечисления, только его значение.
Java автоматически определяет тип элементов в case
, поэтому метки должны быть неквалифицированными.
int i;
switch(i) {
case 5: // <- integer is expected
}
MyEnum e;
switch (e) {
case VALUE_A: // <- an element of the enumeration is expected
}
это:
//Main Class
public class SomeClass {
//Sub-Class
public static class AnotherClass {
public enum MyEnum {
VALUE_A, VALUE_B
}
public MyEnum myEnum;
}
public void someMethod() {
AnotherClass.MyEnum enumExample = AnotherClass.MyEnum.VALUE_A; //...
switch (enumExample) {
case VALUE_A: { //<-- error on this line
//..
break;
}
}
}
}
написать someMethod()
таким образом:
public void someMethod() {
SomeClass.AnotherClass.MyEnum enumExample = SomeClass.AnotherClass.MyEnum.VALUE_A;
switch (enumExample) {
case VALUE_A:
break;
}
}
в инструкции switch необходимо использовать только имя константы.
вот как я его использую. И это работает фантастически -
public enum Button {
REPORT_ISSUES(0),
CANCEL_ORDER(1),
RETURN_ORDER(2);
private int value;
Button(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
и switch-case
как показано ниже
@Override
public void onClick(MyOrderDetailDelgate.Button button, int position) {
switch (button) {
case REPORT_ISSUES: {
break;
}
case CANCEL_ORDER: {
break;
}
case RETURN_ORDER: {
break;
}
}
}