Java中未找到枚举类型的常量。

5
我正在使用 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")。但是我得到了"no enum constant"(无枚举常量)的错误,并没有发现其他错误。我应该得到值MUSIC


1
正确。MUSIC不是音乐。尽管它有一个值为“String”的字段。 - Elliott Frisch
枚举类型中的 valueOf 方法是区分大小写的! - Timothy Truckle
@Elliot Frisch 如果我有音乐字符串,如何获取MUSIC。 - glen maxwell
3个回答

5
一个枚举类型的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
}

0

使用 AbuseSectionType.valueOf("MUSIC") 传递枚举名称。请参阅Java文档以了解valueOf的使用方法。


如果您想获取displayString,则使用AbuseSectionType.MUSIC.getDisplayString()。 - Ashutosh Jha

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接