在Java中启用枚举[重复]

问题

可能重复:编译错误 - 使用枚举切换为什么我的枚举常量引用无法在案例标签中限定?

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


#1 热门回答(226 赞)

你绝对可以打开枚举。从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;
        }
    }
}

#2 热门回答(71 赞)

你实际上可以switchonenums,但是你不能在Java 7之前使用switchonStrings。你可以考虑使用Javaenums而不是explicitswitch进行多态方法调度。请注意,enum是Java中的对象,而不仅仅是int的符号,就像它们在C / C中一样。你可以在enumtype上有一个方法,然后只需调用方法 - 一行代码:完成!而不是编写aswitch

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();
}

#3 热门回答(26 赞)

首先,你可以在Java上打开aenum。我猜你打算说你不能,但你可以.chars有一组设定值,所以很容易比较。字符串可以是任何东西。

Aswitch语句通常在底层编译中实现为ajump table (branch table),这只能通过一组有限的值来实现。 C#可以切换字符串,但由于无法使用跳转表,因此会导致性能下降。

Java 7及更高版本支持String具有相同特性的开关。