【问题标题】:No Enum constant found for type in java在java中找不到类型的枚举常量
【发布时间】:2017-02-20 12:44:01
【问题描述】:

我在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

【问题讨论】:

  • 正确。音乐不是音乐。即使它有一个具有该值的 String 字段。
  • enum 类型中的valueOf 方法区分大小写!
  • @Elliot Frisch 如果我有音乐字符串,如何获得音乐。

标签: java enums


【解决方案1】:

枚举的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
}

【讨论】:

    【解决方案2】:

    如果使用枚举定义的准确拼写,默认的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;
    }
    

    【讨论】:

      【解决方案3】:

      使用AbuseSectionType.valueOf("MUSIC") 传递枚举的名称。有关 valueOf 的使用,请参阅 java 文档

      【讨论】:

      • 如果你想得到 displayString 然后使用 AbuseSectionType.MUSIC.getDisplayString()
      猜你喜欢
      • 2021-11-08
      • 2023-03-06
      • 1970-01-01
      • 2011-07-09
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多