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; } }  | 
你必须在开关语句使用的常数的名称只。