在Java中启用Enum

时间:2011-06-17 20:59:15

标签: java

  

可能重复:
  Compilation error - switch with enum
  Why do I get an Enum constant reference cannot be qualified in a case label?

为什么不能在Java中打开枚举?它似乎很简单,并且可以制作一些方便的代码。此问题也适用于String。您可以启用char,但不能启用String ...?

6 个答案:

答案 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)

您实际上可以在switchenum,但在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;
            }
        }
    }
    

    ideone.com demo

  • 字符串的开关在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,因为它是如此新颖。