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

在java中找不到类型的枚举常量,java,enums,Java,Enums,我在java中使用enum,这里是enum public enum AbuseSectionType{ MUSIC("Music"), DANCE("Dance"), SOLO("Solo"), ACT("Act") private String displayString; AbuseSectionType(String displayValue) { this.displayString = displayValue; } @J

我在java中使用
enum
,这里是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;
    }
}
我正在尝试获取value
一个sessiontype.valueOf(“音乐”)
。我没有得到枚举常量,没有发现错误。我应该有值
MUSIC

枚举的
name()
是声明它时指定的名称,在您的例子中是
MUSIC

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

返回具有 指定的名称

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
}
默认的
valuOf()
方法将仅在使用枚举定义的精确拼写时检索相应的
enmum
。在您的例子中,您已经定义了enum
MUSIC
,因此为了得到它,您必须这样做:
abusectionType.valueOf(“MUSIC”)

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

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

    return null;
}

使用AbuseSectionType.valueOf(“音乐”)传递枚举的名称。有关valueOf的使用,请参见java文档。请更正。音乐不是音乐。即使它有一个带有该值的
String
字段。
enum
类型中的
valueOf
方法区分大小写@Elliot Frisch如果我有音乐字符串,如何获取音乐。如果您想获取displayString,请使用AbusSectionType.MUSIC.getDisplayString()