如何解决带有Java中的字符串和枚举的switch-case
我想使用switch-case来检查Java中具有enum值的字符串,所以我做到了:
public enum DemoEnumType {
ALL(""),TOP("acb"),BOTTOM("def");
private String code;
DemoEnumType(String code) {
this.code = code;
}
public String code() {
return this.code;
}
}
当我运行此代码时,它将引发异常:
public class Demo {
public static void main(String[] args) {
DemoEnumType typeValue = DemoEnumType.valueOf("acb");
switch (typeValue){
case ALL:
System.out.print("match");
case BOTTOM:
System.out.print("match");
case TOP:
System.out.print("match");
}
}
}
项目:
线程“ main”中的异常java.lang.IllegalArgumentException:没有枚举常量package.DemoEnumType.acb。
解决方法
DemoEnumType typeValue = DemoEnumType.valueOf("acb");
不存在带有值acb
的枚举元素。如果给定的Enum#valueOf
中不存在任何元素,则IllegalArgumentException
将抛出name
。您需要使用ALL
,BOTTOM
或TOP
。
DemoEnumType type = DemoEnumType.valueOf("ALL");
或者,您可以使用String到DemoEnumType的映射进行O(1)查找,并使用您提供的值。
Map<String,DemoEnumType> valueToType = Stream.of(DemoEnumType.values())
.collect(Collectors.toMap(DemoEnumType::code,Function.identity());
DemoEnumType type = valueToType.get("abc");
,
您的Enum成员是ALL,TOP和BOTTOM,而不是字符串值。您只能将其传递给valueOf()。
要使用字符串值,您可以在Enum中创建一个接收字符串并返回适当Enum的方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。