当前位置: 首页 > 知识库问答 >
问题:

在Java中,如何将枚举与开关用例一起使用?[副本]

金亦
2023-03-14

以前,我使用这种方式将密钥保存在SharedPreesscesManager类中

public static final int KEY_COUNTRY_ID = 5,
     KEY_COUNTRY_NAME = 10,
     KEY_CURRENCY_ID = 15,
     KEY_CURRENCY_NAME = 20;

我决定使用枚举来存储密钥,因为我认为这是一种比旧方法更好的方法,以下是我尝试的方法。

anager.java

public class SharedPreferencesManager {

    private static SharedPreferences sharedPreferences;
    private static SharedPreferences.Editor editor;

    private static void initializeSharedPreferences(Context context) {
        if (sharedPreferences == null)
            sharedPreferences = context.getSharedPreferences("SharedPreferencesManager", Context.MODE_PRIVATE);
    }

    private static void initializeEditor() {
        if (editor == null)
            editor = sharedPreferences.edit();
    }

    public static void setValue(Context context, String key, int value) {
        initializeSharedPreferences(context);
        initializeEditor();
        editor.putInt(key, value);
        editor.apply();
    }

    public static int getIntegerValue(Context context, String key) {
        initializeSharedPreferences(context);
        switch (key) {
            case Keys.COUNTRY_ID.name():
            case Keys.CURRENCY_ID.name():
                return sharedPreferences.getInt(key, 5);
        }
        return -1;
    }

    public enum Keys {
        COUNTRY_ID,
        COUNTRY_NAME,
        CURRENCY_ID,
        CURRENCY_NAME
    }

}

错误

Constant expression required

用例键下方的红线。COUNTRY_ID.name():和大小写键。CURRENCY\u ID.name():

我怎样才能解决这个问题?

共有1个答案

常智勇
2023-03-14

正如编译器告诉您的那样,如果使用switch(aStringVariable),则需要使用常量字符串表达式。正确的方法是将字符串值转换为枚举常量,然后使用开关打开该常量

使用将字符串转换为枚举即时

Keys keyConstant = Keys.valueOf(key); //argument of "COUNTRY_ID" returns Keys.COUNTRY_ID

这将按该名称查找枚举常量(与名称()匹配)。然后在开关中使用:

switch(keyConstant) {
  case COUNTRY_ID: ...
}
 类似资料:
  • 问题内容: 更新: 感谢所有提供帮助的人-这个答案的答案在于我在更复杂的代码中没有注意到的内容以及对Java5协变量返回类型不了解的内容。 原始帖子: 今天早上我一直在玩一些东西。虽然我知道我 可以用 不同的方式解决整个问题,但我发现自己一直迷恋于弄清楚为什么它没有按我预期的那样工作。在花了一些时间阅读这些内容之后,我发现我离理解还很近,因此我将其作为一个问题来看看我是否只是愚蠢,或者是否真的有我

  • 问题内容: 如何使用hibernate注释来验证枚举成员字段?以下内容不起作用: 问题答案: 请注意,您还可以创建一个验证器来检查String是否为枚举的一部分。 这很好,因为您不会丢失“错误值”的信息。您会收到类似的消息 值“ someBadUserType”不是有效的用户类型。有效的UserType值为:PERSON,COMPANY 编辑 对于那些想要非番石榴版本的人,它应该可以使用类似以下的

  • 我正在尝试检查我的VO中设置了哪些值。 下面是我的女儿。我得到的是“合格的病例标签MyEnum.UserType.Doctors必须替换为不合格的枚举常量Doctors” EnumTest.java

  • 本文向大家介绍我们如何在Java中将枚举类型与构造函数一起使用?,包括了我们如何在Java中将枚举类型与构造函数一起使用?的使用技巧和注意事项,需要的朋友参考一下 枚举类型可以具有一个私有的构造函数,该构造函数可用于初始化实例字段。  EnumDemo类演示了这一点。它具有带有四个常量的Food枚举类型:HAMBURGER,FRIES,HOTDOG和ARTICHOKE。请注意,括号后的每个常数值之

  • 问题内容: 当我阅读 Effective Java时 ,作者告诉我,单元素类型是实现单例的最佳方法,因为我们不必考虑复杂的序列化或反射攻击。这意味着我们无法创建使用反射的实例,对吗? 我已经做了一些测试,并在这里上课: 然后我尝试创建一个实例: 如您所知,它不起作用。当我更改关键字来,它的工作原理。我想知道为什么。谢谢。 问题答案: 这是语言内置的。根据Java语言规范(§8.9): 尝试显式实例