作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 enum 声明为 switch 语句的输入,因为它不允许 String
值。
public enum names{VALUE1, VALUE2}
我有一个List
值(VALUE1, VALUE2, VALUE3)
for(int i=0; i<list.size();i++)
{
names n=new names(list.get(i).trim());
switch(n) {
case VALUE1:
System.out.println("1");
break;
case VALUE2:
System.out.println("2");
break:
default:
System.out.println("Nothing to print");
}
}
在执行上述代码时,我得到 No Enum constant Class.data.VALUE3.
错误。请帮我解决这个错误。
最佳答案
你可以使用names.valueOf(),但如果找不到名称,它会抛出异常:
for(int i=0; i<list.size();i++)
{
try {
names n=names.valueOf(list.get(i).trim());
switch(n) {
case VALUE1:
System.out.println("1");
break;
case VALUE2:
System.out.println("2");
break:
default:
System.out.println("Nothing to print");
}
} catch (IllegalArgumentException e) {
System.out.println("Nothing to print");
}
}
否则,您需要一个循环:
private static names find(String name) {
for (names n: names.values()) {
if (n.name().equals(name)) {
return n;
}
}
return null;
}
但您需要在切换之前检查 null:
for(int i=0; i<list.size();i++)
{
names n=find(list.get(i).trim());
if (n != null) {
switch(n) {
case VALUE1:
System.out.println("1");
break;
case VALUE2:
System.out.println("2");
break:
default:
System.out.println("Nothing to print");
}
} else {
System.out.println("Nothing to print");
}
}
关于java - 未找到枚举常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47507077/
我是一名优秀的程序员,十分优秀!