繁体   English   中英

如何将ENUM与SWITCH结合使用,以进行基于字符串的比较

[英]How to use ENUM with SWITCH, for String based comparison

我有一个下面的枚举类。

public enum TestEnum {
    TEST1("test1"), TEST2("test2");

    private String name;
    TestEnum(String name) {
        this.name= name;
    }
    public String getName(){
        return name;
    }
}

我试图在SWITCH语句中使用它来与字符串进行比较,但无法使用。 看下面的截图,我只看到.class选项。 我非常惊讶,因为在另一个框中可以看到这些值。

在此处输入图片说明

现在,我遇到的另一个问题是,让我说一旦看到值,我就需要对case TestEnum.TEST1.getName():进行case TestEnum.TEST1.getName():以便它可以与switch语句一起使用,但是在这里我得到了错误,指出只允许使用常量开关盒。

有人可以帮忙吗? 基本上,我想要的不是代替对照“ test1”或“ test2”之类的可能字符串数检查字符串,而是要使用SWITCH进行此操作。

顺便说一句,我有32个IF-ELSEIF块,有人告诉我,我应该改用SWTICH,因为我使用32个IF-ELSEIF块是不好的。

大小写标签是常量。 考虑在枚举类中添加静态方法:

public enum TestEnum {
    TEST1("test1"), TEST2("test2");

    private String name;
    TestEnum(String name) {
        this.name= name;
    }
    public String getName(){
        return name;
    }
    public static TestEnum fromName(String name) {
        for (TestEnum e: values()) {
            if (e.name.equals(name)) {
                return e;
            }
        }
        throw new IllegalArgumentException("Name not found: " + name);
    }
}

然后,您将能够编写switch语句:

switch (TestEnum.fromName(name)) {
case TEST1:
    //...
    break;
case TEST2:
    //...
    break;
}

您可以创建自己的方法以将字符串值转换为枚举。

例如,这是我经常使用的方法:

public enum TestEnum {
    // Enum constants
    // Enum fields, constructors, etc..

    public static TestEnum fromName(String name) {
        return Arrays.stream(values())
            .filter(e -> e.name.equals(name))
            .findFirst()
            .orElse(null);
    }
}

现在,可以在switch语句中使用结果枚举

您可以考虑使用String常量而不是Enum 例如:

public class TestEnum {

    private static final String TEST1 = "test1";
    private static final String TEST2 = "test2";

}

然后可以在switch语句中使用,如下所示:

switch(name) {
    case TestEnum.TEST1:
        break;
    case TestEnum.TEST2:
        break;
    default:
        break;
}

然后,IDE中的完成应该为您提供选项TESTTEST2 ,...。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM