当前位置: 首页 > 面试题库 >

在Enum中不是一个常数

甘兴学
2023-03-14
问题内容

我在开关情况下使用枚举,但出现以下错误:

NEWS FEED在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);
}

现在代替valueOf使用valueFor

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


 类似资料:
  • 我使用jOOQ和Postgreql从表中选择枚举值。 不管怎样,我得到了一个例外: 我看到将返回

  • 所以我在使用DerbyDB,并建立了一些实体。我有一个,它被用作某些实体的超类()。更具体地说,我有一个超类和3个子类,即、和。现在我有了一个不同的实体,比如说,它应该引用(作为其字段之一)它的所有者。所以我创建了一个名为的字段。我得到的错误是: 有变通办法吗?

  • 问题内容: 为什么不能打开Java枚举?看起来很简单,可以做一些方便的代码。这个问题也适用于。你可以打开,但不能打开? 问题答案: 你绝对可以打开枚举。Java教程中发布的示例。

  • 问题内容: 在.NET Framework 的参考中,使用type 声明请求类型。 在RFC 2616 中,声明了所有HTTP请求方法(例如POST,GET,PUT,DELETE …)。 .NET 和类中也存在类似的行为。 Java在方法上有类似的方法。 这些语言设计者为什么不考虑为这些HTTP方法实现枚举? 你有好主意吗? 问题答案: RFC 2616 链接的第一句话(添加了重点): HTTP

  • 问题内容: 我一直在看该类的源代码。对我来说,这似乎是一个普通的抽象类,带有受保护的构造函数。它不是最终的,它内部没有任何特殊的注释,并且不使用本机代码。但是,它不能直接子类化。实际上,以下代码无法编译: 我知道这是Java中的一个特殊类,并且我知道有充分的理由应禁止直接子类化。但是从技术上讲,您如何执行此行为?程序员是否可以创建类似的非最终类,尽管具有可访问的构造函数,该类仍不允许直接子类化?

  • 我正在重构我的索引文件,该文件在Sequelize中创建我的所有模型,以使用导入,而不是切换到节点v14和Sequelize v6和模块的require。但我被这个奇怪的错误困住了: 下面是发生这种情况的代码块: 错误表明它发生在这一行: