Java:在子类下使用带有枚举的switch语句

首先我要说的是,我更熟悉C#中的枚举,看起来像java中的枚举相当混乱。

正如你所看到的,我试图在下一个例子中使用switch语句@enums,但是无论我在做什么,我都会得到一个错误。

我收到的错误是:

合格的案例标签SomeClass.AnotherClass.MyEnum.VALUE_A必须replace为不合格的枚举常量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; } } } } 

将其更改为:

 switch (enumExample) { case VALUE_A: { //.. break; } } 

线索是在错误。 您不需要使用枚举types来限定case标签,只是它的值。

Java自动推断元素的types,因此标签必须是不合格的。

 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; } } }