首先我会说我更熟悉C#中的枚举,并且它看起来像java中的枚举是相当混乱的。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;
}
}
}
}
作为darrengorman评论,爪哇['Enum'](http://docs.oracle.com/javase/8/
和所述
switch-case
- 它是工作飞驰docs/api/java/lang/Enum.html)一旦得到它们的窍门,就非常方便 - 一点都不乱。与其他平台上看到的简单枚举(仅仅是一个带标签的整数值)相比,它们更加灵活和实用。请参阅[Oracle教程](http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)。发现优化的'Set' /'Map'实现:['EnumSet'](http://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html)&['EnumMap'] (http://docs.oracle.com/javase/8/docs/api/java/util/EnumMap.html)。 – 2017-08-05 20:12:57当您尝试限定案例声明时;在某种程度上,您试图说我可以在单个switch语句中混合不同类型的枚举(不仅仅是相同的枚举类型)。爪哇已经停止了这种方法,这里讨论http://www.digizol.com/2010/10/enum-case-label-switch-java-qualified.html – lkamal 2017-11-16 18:52:08