我在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
。
答案 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文档