可能重复:
Compilation error - switch with enum
Why do I get an Enum constant reference cannot be qualified in a case label?
为什么不能在Java中打开枚举?它似乎很简单,并且可以制作一些方便的代码。此问题也适用于String
。您可以启用char
,但不能启用String
...?
答案 0 :(得分:247)
你绝对可以打开枚举。从Java tutorials发布的示例。
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY:
System.out.println("Mondays are bad.");
break;
case FRIDAY:
System.out.println("Fridays are better.");
break;
case SATURDAY:
case SUNDAY:
System.out.println("Weekends are best.");
break;
default:
System.out.println("Midweek days are so-so.");
break;
}
}
}
答案 1 :(得分:73)
您实际上可以在switch
上enum
,但在Java 7之前switch
上不能String
。您可以考虑将多态方法调度与Java一起使用{ {1}}而不是明确的enum
。请注意switch
是Java中的对象,而不仅仅是enum
的符号,就像它们在C / C ++中一样。您可以使用int
类型的方法,然后只需调用方法 - 一行代码:完成!
enum
。
switch
答案 2 :(得分:26)
首先,您可以在Java中打开enum
。我猜你打算说你不能,但你可以。 char
具有一系列值,因此很容易进行比较。字符串可以是任何东西。
switch
语句通常在底层编译中实现为jump table (branch table),只能使用一组有限的值。 C#可以打开字符串,但由于无法使用跳转表,因此会导致性能下降。
Java 7及更高版本支持具有相同特征的String
switches。
答案 3 :(得分:22)
启用枚举功能正常。
enum MyEnum { CONST_ONE, CONST_TWO }
class Test {
public static void main(String[] args) {
MyEnum e = MyEnum.CONST_ONE;
switch (e) {
case CONST_ONE: System.out.println(1); break;
case CONST_TWO: System.out.println(2); break;
}
}
}
字符串的开关在Java 7中实现。
阅读所有新功能here。
答案 4 :(得分:13)
您可能在切换案例中错误地使用了枚举。与CoolBeans的上述示例相比,您可能会执行以下操作:
switch(day) {
case Day.MONDAY:
// Something..
break;
case Day.FRIDAY:
// Something friday
break;
}
确保使用实际的枚举值而不是EnumType.EnumValue
Eclipse虽然指出了这个错误。
答案 5 :(得分:1)
实际上你可以在Java中使用带有Strings的switch语句......不幸的是,这是Java 7的一个新功能,而且大多数人还没有使用Java 7,因为它是如此新颖。