java - 在枚举中不是常量

标签 java enums enumeration

我将枚举与 switch case 一起使用,但出现以下错误:

NEWS FEED is not a constant in 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 函数中创建一个异常,即使传递的值相同,所以任何帮助将不胜感激,因为我已尽一切努力解决这个问题。

最佳答案

将此代码添加到您的枚举中

private static final Map<String, FragmentName> map = new HashMap<>();
static {
    for (FragmentName en : values()) {
        map.put(en.text, en);
    }
}

public static FragmentName valueFor(String name) {
    return map.get(name);
}

现在使用 valueFor 而不是 valueOf

switch (Enums_String.FragmentName.valueFor(title))
//                                ^^^^^^^^

关于java - 在枚举中不是常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271061/

相关文章:

java - 如何处理 java.rmi.UnknownHostException

java - 为什么 Java Character.toUpperCase/toLowerCase 没有像 String.toUpperCase/toLowerCase 这样的 Locale 参数

postgresql - 如何在 postgres 中创建具有默认值的枚举

Java:多次使用枚举

c++ - 将枚举器分配给具有相同值的枚举器的枚举类型

java - 为 KeyStroke 设置多个掩码

java - Salesforce OAuth Access_Token 为空?

swift - 如何对带参数的枚举进行 if-else 比较

vba - 有没有办法在 VBA 中获取枚举?

ruby-on-rails - ruby 的 "any?"和 "all?"方法在空数组和哈希上的行为