在Java中打开Enum
可能重复:
编译错误 – 使用枚举切换
为什么我得到一个枚举常量引用无法在案例标签中被限定?
为什么你不能在Java中打开一个枚举? 看起来很简单,做一些方便的代码。 这个问题也可以适用于String
的。 你可以打开一个char
,但不是一个String
…?
你一定可以打开枚举。 一个例子从Java 教程发布。
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; } } }
你实际上可以switch
enum
,但是你不能在Java 7之前switch
String
。你可能会考虑使用Java enum
的多态方法dispatch而不是显式的switch
。 请注意enum
是Java中的对象,而不仅仅是像C / C ++中的符号。 你可以有一个enum
types的方法,而不是写一个switch
,只需调用方法 – 一行代码:完成!
enum MyEnum { SOME_ENUM_CONSTANT { @Override public void method() { System.out.println("first enum constant behavior!"); } }, ANOTHER_ENUM_CONSTANT { @Override public void method() { System.out.println("second enum constant behavior!"); } }; // note the semi-colon after the final constant, not just a comma! public abstract void method(); // could also be in an interface that MyEnum implements } void aMethodSomewhere(final MyEnum e) { doSomeStuff(); e.method(); // here is where the switch would be, now it's one line of code! doSomeOtherStuff(); }
首先,你可以在Java中打开一个enum
。 我猜你打算说,你不能,但你可以。 char
有一个设定的值范围,所以很容易比较。 string可以是任何东西。
switch
语句通常作为底层编译中的跳转表(分支表)来实现,只能使用有限的一组值。 C# 可以打开string,但会导致性能下降,因为不能使用跳转表。
Java 7和更高版本支持具有相同特征的String
开关 。
-
打开枚举工作正常。
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; } } }
ideone.com演示
-
string开关在Java 7中实现。
在这里阅读所有新function。
您可能会在开关箱中错误地使用枚举。 与上面CoolBeans的例子相比,你可能会这样做:
switch(day) { case Day.MONDAY: // Something.. break; case Day.FRIDAY: // Something friday break; }
确保您使用实际的枚举值而不是EnumType.EnumValue
Eclipse虽然指出了这个错误
实际上,你可以在java中使用Strings的switch语句…不幸的是,这是Java 7的一个新特性,大多数人还没有使用Java 7,因为它非常新颖。