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