Java: using switch statement with enum under subclass
首先我要说的是,我对C语言中的枚举更加熟悉,Java中的枚举看起来相当混乱。
如您所见,我在下一个示例中尝试使用switch语句@enums,但无论我在做什么,总是会得到一个错误。
我收到的错误是:
The qualified case label
SomeClass.AnotherClass.MyEnum.VALUE_A must be replaced with the unqualified enum constantVALUE_A
问题是我很理解这个错误,但是我不能只写一个值,因为枚举位于另一个子类中。有没有办法解决这个问题?为什么它在Java中发生?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | //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; } } } } |
这两个变化信息:
1 2 3 4 5 6 | switch (enumExample) { case VALUE_A: { //.. break; } } |
的CLUE冰的误差。你不需要,
《Java infers自动式的元素在
1 2 3 4 5 6 7 8 | int i; switch(i) { case 5: // <- integer is expected } MyEnum e; switch (e) { case VALUE_A: // <- an element of the enumeration is expected } |
这是应该做的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | //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; } } } } |
错误:
1 | case AnotherClass.MyEnum.VALUE_A |
右:
1 | case VALUE_A: |
我是怎么利用它。它的工作fantastically -冰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Override public void onClick(MyOrderDetailDelgate.Button button, int position) { switch (button) { case REPORT_ISSUES: { break; } case CANCEL_ORDER: { break; } case RETURN_ORDER: { break; } } } |
在这种方式
1 2 3 4 5 6 7 8 9 10 | public void someMethod() { SomeClass.AnotherClass.MyEnum enumExample = SomeClass.AnotherClass.MyEnum.VALUE_A; switch (enumExample) { case VALUE_A: break; } } |
你必须在开关语句使用的常数的名称只。