在java中找不到类型的枚举常量

时间:2017-02-20 12:44:02

标签: java enums

我在java中使用enum,这是枚举

public enum AbuseSectionType{

    MUSIC("Music"), DANCE("Dance"), SOLO("Solo"), ACT("Act")

    private String displayString;

    AbuseSectionType(String displayValue) {
        this.displayString = displayValue;
    }

    @JsonValue
    public String getDisplayString() {
        return displayString;
    }

    public void setDisplayString(String displayString) {
        this.displayString = displayString;
    }
}

我正在努力获得价值AbuseSectionType.valueOf("Music")。我没有得到枚举常数,没有发现任何错误。我应该有价值MUSIC

3 个答案:

答案 0 :(得分:2)

枚举的name()是在声明时指定的名称,MUSIC

如果我们阅读valueOf()的javadoc:

  

返回指定枚举类型的枚举常量   指定名称。

valueOf()正在使用枚举的name()。但是你想要实现的是不同的,所以你不能使用这种方法。你可以做的是创建自己的方法,从你自己的字段中找到值(displayString)。

以下是一个例子:

public static AbuseSectionType fromDisplayString(String displayString)
{
    for(AbuseSectionType type : AbuseSectionType.values())
        if(type.getDisplayString().equals(displayString)
            return type;

    return null; //not found
}

答案 1 :(得分:0)

默认valuOf()方法只会在使用枚举定义的确切拼写时检索相应的enmum。在你的情况下,你已经定义了枚举MUSIC,所以为了获得它,你必须这样做:AbuseSectionType.valueOf("MUSIC");

为了达到你想要的效果,你必须自己在枚举类中实现一个方法。对于你的例子,你可以做这样的事情:

public AbuseSectionType resolve(String name) {
    for(AbuseSectionType current : AbuseSectionType.values()) {
        if(current.displayString.equals(name)) {
            return current;
        }
    }

    return null;
}

答案 2 :(得分:0)

使用AbuseSectionType.valueOf(“MUSIC”)传递枚举的名称。请参阅有关使用valueOf

的java文档