有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中打开枚举

为什么不能在Java中打开枚举?这似乎足够简单,可以生成一些方便的代码。这个问题也适用于String。你可以打开char,但不能打开String


共 (6) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    实际上,您可以在enumswitch,但在Java 7之前,您不能在Stringswitch。您可以考虑使用java ^ ^ {CD2> }s而不是显式^ {< CD1> }使用多态方法。请注意enum在Java中是对象,而不仅仅像在C/C++中那样是int的符号。你可以在enum类型上有一个方法,然后不用写switch,只需调用这个方法——一行代码: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();
    }
    
  3. # 3 楼答案

    你绝对可以打开枚举。一个来自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;
            }
        }
    }
    
  4. # 4 楼答案

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

    switch(day) {
        case Day.MONDAY:
            // Something..
            break;
        case Day.FRIDAY:
            // Something friday
            break;
    }
    

    确保使用实际的枚举值,而不是枚举类型。枚举值

    Eclipse指出了这个错误

  5. # 5 楼答案

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

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

    Java 7及更高版本支持具有相同特征的^{} switches

  6. # 6 楼答案

    关于编程的文章。指南:Switch on enum


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

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