以前,我使用这种方式将密钥保存在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():
我怎样才能解决这个问题?
正如编译器告诉您的那样,如果使用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): 尝试显式实例