switch语句中的Java非常量表达式

all*_*oot 2 java enums

我有一个类似于以下内容的枚举类:

public enum MyEnum {
    VALUE1("value.1"),
    VALUE2("value.2");

    private String value;
    private MyEnum(String value) { this.value = value; }

    public String getId() { return id; }
}
Run Code Online (Sandbox Code Playgroud)

我想对枚举的值有一个switch语句.类似于以下内容:

switch (myString) {
case MyEnum.VALUE1.getId():
   ...
}
Run Code Online (Sandbox Code Playgroud)

我得到以下编译时错误:case表达式必须是常量表达式.

有没有办法让它与enum和switch语句一起使用?我在枚举中添加值的原因是因为我想要一些带有"."的ID.和其他不允许的字符.

Kev*_*sox 7

添加一个静态方法,接受String id作为参数并返回相应的MyEnum:

public enum MyEnum {
    VALUE1("value.1"),
    VALUE2("value.2");

    private String id;

    private MyEnum(String value) {
        this.id = value;
    }

    public String getId() {
        return id;
    }

    public static MyEnum fromId(String id){
        for(MyEnum e:MyEnum.values()){
            if(e.getId().equals(id)){
                return e;
            }
        }
        throw new RuntimeException("Enum not found");
    }

    public static void main(String[] args) {
        String value = "value.2";
        switch(MyEnum.fromId(value)){
        case VALUE1:
            System.out.println("ID 1");
        break;
        case VALUE2:
            System.out.println("ID 2");
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)