在Java中打开枚举

在Java中打开枚举,java,Java,为什么不能在Java中打开枚举?这似乎很简单,可以生成一些方便的代码。这个问题也适用于字符串。您可以打开字符,但不能打开字符串。您肯定可以打开枚举。一个例子张贴在 你绝对可以打开枚举。一个例子张贴在 关于编程的文章。指南: 字符串开关在Java 7中实现。关于编程的文章。指南: 字符串的开关在Java 7中实现。首先,您可以在Java中打开枚举。我猜你是想说你不能,但你可以chars有一组值,因此很容易比较。字符串可以是任何东西 switch语句通常在底层编译中实现为,这仅在有限的值集合中才

为什么不能在Java中打开枚举?这似乎很简单,可以生成一些方便的代码。这个问题也适用于
字符串
。您可以打开
字符
,但不能打开
字符串

您肯定可以打开枚举。一个例子张贴在


你绝对可以打开枚举。一个例子张贴在


关于编程的文章。指南:



字符串开关在Java 7中实现。

关于编程的文章。指南:



字符串的开关在Java 7中实现。

首先,您可以在Java中打开
枚举。我猜你是想说你不能,但你可以
char
s有一组值,因此很容易比较。字符串可以是任何东西

switch
语句通常在底层编译中实现为,这仅在有限的值集合中才可能实现。C#可以打开字符串,但它会导致性能下降,因为无法使用跳转表


Java 7和更高版本支持相同的特性。

首先,您可以在Java中打开
枚举。我猜你是想说你不能,但你可以
char
s有一组值,因此很容易比较。字符串可以是任何东西

switch
语句通常在底层编译中实现为,这仅在有限的值集合中才可能实现。C#可以打开字符串,但它会导致性能下降,因为无法使用跳转表


Java 7和更高版本支持相同的特性。

您可能在交换机情况下错误地使用了枚举。与上面的CoolBeans示例相比。。您可能正在执行以下操作:

switch(day) {
    case Day.MONDAY:
        // Something..
        break;
    case Day.FRIDAY:
        // Something friday
        break;
}
确保使用实际的枚举值,而不是EnumType.EnumValue


Eclipse指出了这个错误。

您可能在交换机案例中错误地使用了枚举。与上面的CoolBeans示例相比。。您可能正在执行以下操作:

switch(day) {
    case Day.MONDAY:
        // Something..
        break;
    case Day.FRIDAY:
        // Something friday
        break;
}
确保使用实际的枚举值,而不是EnumType.EnumValue


Eclipse指出了这个错误。

实际上,您可以在Java中使用带字符串的switch语句…不幸的是,这是Java 7的一个新功能,而且大多数人还没有使用Java 7,因为它太新了。

实际上,您可以在Java中使用带字符串的switch语句…不幸的是,这是Java 7的一个新功能,大多数人还没有使用Java 7,因为它太新了。

你实际上可以
打开
枚举
s,但在Java 7之前你不能
打开
字符串
s。可以考虑使用java <代码> EnUM< /Cult> s而不是显式<代码>开关< /> >使用多态方法。请注意,
enum
s在Java中是对象,而不仅仅像在C/C++中一样是
int
s的符号。您可以在
枚举
类型上拥有一个方法,然后不必编写
开关
,只需调用该方法-一行代码:done

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

实际上,您可以
enum
s上切换
,但在Java 7之前,您不能
String
s上切换
。可以考虑使用java <代码> EnUM< /Cult> s而不是显式<代码>开关< /> >使用多态方法。请注意,
enum
s在Java中是对象,而不仅仅像在C/C++中一样是
int
s的符号。您可以在
枚举
类型上拥有一个方法,然后不必编写
开关
,只需调用该方法-一行代码:done

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很简单,但方便的Java不是!执行switch语句的真正简单方法就像在C中一样,Java就是这样做的!原则上,Java不像C语言那样方便。这就是Java的生活方式。如果你真的想用Java编写代码,你就必须处理这种心态。之所以会出现这种错误,是因为你试图键入enumName的大小写。你必须键入switch(enumVariable){case Value:}显示你的非工作enum开关代码。为什么要重复标记,看看标题有多精确,对于新用户来说很容易找到。你可以看看这篇文章,看看它是如何做到的:“它似乎足够简单,并且可以生成一些方便的代码。”是的,Java很简单,但方便的Java却不是!执行switch语句的真正简单方法就像在C中一样,Java就是这样做的!原则上,Java不像C语言那样方便。这就是Java的生活方式。如果你真的想用Java编写代码,你就必须处理这种心态。之所以会出现这种错误,是因为你试图在enumName.Value中键入case。你必须键入switch(enumVariable){case Value:}这种方法的一个优点是根本不可能得到某些类型的错误。你不能错过一个切换案例(你可以错误地实现一个特定常量的方法,但是没有什么可以完全阻止这种情况发生!)。没有需要担心的“默认”开关。此外,我还看到过将枚举常量放入数组,然后将索引放入数组的代码-这就打开了数组索引越界异常的可能性-只需使用枚举!Java枚举非常强大。了解有关它们的所有信息,以便有效地使用它们。还要注意,对于特定方法,如果您有多个枚举常量都具有相同的行为(例如@CoolBeans days of the week示例,其中周末具有相同的行为,而工作日周二到周四也具有相同的行为),您可以简单地将共享代码收集到一个enum方法中,该方法不会被每个常量(final protected)覆盖,然后调用