【发布时间】:2015-07-07 14:13:37
【问题描述】:
我正在使用带有开关盒的枚举,但我收到以下错误:
NEWS FEED 不是 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 函数中创建一个异常,所以任何帮助都将不胜感激,因为我已尽一切努力解决这个问题。
【问题讨论】:
-
valueOf调用希望您传入像FRAGMENT_NEWSFEED这样的值,而不是字符串值NEWS FEED。 -
当您使用
title为"NEWS FEED"调用Enums_String.FragmentName.valueOf(title)时,您期望会发生什么以及您认为它应该以这种方式工作的原因(文档的哪一部分建议您这应该像您一样工作)认为是)? -
感谢 sstan,但我希望 'NEWS FEED' 发送到 changeTitle(String) 方法和相应的,它必须工作
-
“NEWS FEED”不是枚举的值,而是枚举中文本字段的值。您需要传入一个字符串,它是枚举值的名称,例如“FRAGMENT_NEWSFEED”
-
@Vikram:如果你想使用自己的字符串,那么你不能使用
valueOf。将您自己的方法添加到将用户定义的字符串转换为枚举常量的枚举中,然后调用它。
标签: java enums enumeration