我将枚举与 switch case 一起使用,但出现以下错误:
NEWS FEED is not a constant in FragmentName
这是我的枚举字符串常量,
public enum FragmentName{
FRAGMENT_NEWSFEED("NEWS FEED"),
FRAGMENT_MESSAGES("MESSAGES"),
FRAGMENT_EVENTS("EVENTS"),
FRAGMENT_WHOISAROUDNME("WHOS AROUND");
private final String text;
private FragmentName(final String text) {
this.text = text;
}
@Override
public String toString() {
return text;
}
}
//This is my function from where i check for corresponding enum constant
public void changeTitle(String title) {
switch (Enums_String.FragmentName.valueOf(title)) {
case FRAGMENT_NEWSFEED:
System.out.println("1");
break;
case FRAGMENT_EVENTS:
System.out.println("2");
break;
case FRAGMENT_MESSAGES:
System.out.println("3");
break;
case FRAGMENT_WHOISAROUDNME:
System.out.println("4");
break;
}
}
当我打电话
changeTitle("NEWS FEED");
它会在 changeTitle 函数中创建一个异常,即使传递的值相同,所以任何帮助将不胜感激,因为我已尽一切努力解决这个问题。
最佳答案
将此代码添加到您的枚举中
private static final Map<String, FragmentName> map = new HashMap<>();
static {
for (FragmentName en : values()) {
map.put(en.text, en);
}
}
public static FragmentName valueFor(String name) {
return map.get(name);
}
现在使用 valueFor
而不是 valueOf
switch (Enums_String.FragmentName.valueFor(title))
// ^^^^^^^^
关于java - 在枚举中不是常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271061/