在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 ++中的符号。 你可以有一个enumtypes的方法,而不是写一个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,因为它非常新颖。