switch-case与java中的字符串和枚举

i5desfxk  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(341)

我想在java中使用switch case检查一个值为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。

to94eoyn

to94eoyn1#

枚举成员是all,top和bottom,而不是字符串值。只能传递给valueof()。
要使用字符串值,可以在枚举中创建一个方法,该方法接收字符串并返回相应的枚举

mklgxw1f

mklgxw1f2#

DemoEnumType typeValue = DemoEnumType.valueOf("acb");

不存在具有该值的枚举元素 acb . Enum#valueOf 将抛出一个 IllegalArgumentException 如果给定的 name . 你需要使用 ALL , BOTTOM ,或 TOP .

DemoEnumType type = DemoEnumType.valueOf("ALL");

或者,您可以使用字符串Mapdemoenumtype进行o(1)查找,并使用您提供的值。

Map<String, DemoEnumType> valueToType = Stream.of(DemoEnumType.values())
        .collect(Collectors.toMap(DemoEnumType::code, Function.identity());

DemoEnumType type = valueToType.get("abc");

相关问题