我想知道,什么是正在使用的常见的方法来保存Enum到SharedPrefereces?目前,我正在使用gson将枚举转换为String,然后将其保存到SharedPrefereces.
Gson gson = new Gson();
// country is an enum.
String json_country = gson.toJson(country);
sharedPreferences.edit().putString(COUNTRY, json_country);
Run Code Online (Sandbox Code Playgroud)
我在想,这是一个好方法吗?有没有更好的方法?
大家好.所以我有一组枚举和一个带有与这些枚举相对应的整数的数据库.像这样的东西,例如:
public static enum Day {
SUNDAY(1), MONDAY(2), TUESDAY(3), WEDNESDAY(4), THURSDAY(5), FRIDAY(6), SATURDAY(7);
public final int fId;
private Day(int id) {
this.fId = id;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个数据库,它只引用这些天的整数,它们对应于上面枚举集中的int.我要做的是查询一个数据库,它将返回一个整数,然后根据从db返回的整数将枚举数设置为一个对象.我可以这样做:
public static Day getDay(int i) {
switch(i) {
case 1:
return Day.SUNDAY;
case 2:
return Day.MONDAY;
//And so on
}
}
Run Code Online (Sandbox Code Playgroud)
但对于一个包含100多个枚举的枚举,这似乎不太实用.
有没有办法做到这一点?我的目标是简单地插入一个int值并返回一个枚举器,而不必为这个集合中的许多枚举创建一个新方法.也许我应该把它作为自己的类而不是枚举器,但我希望这样做.谢谢!
有没有办法将枚举转换为常量表达式?我希望我的switch操作符在枚举的值中进行选择,但是我得到了一个编译错误"case表达式必须是常量表达式",所以我试着在变量中声明它:
final int REG = MyEnum.REG.getIndex().intValue();
switch (service.getIndex()) {
case REG:
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误.根据Oracle的文档http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28
编译时常量表达式是表示基本类型的值的表达式或不突然完成的字符串,仅使用以下内容组成:
•原始类型的文字和String类型的文字
所以它没有用,因为我没有使用文字.我想我必须声明为:
final int REG = 8;
Run Code Online (Sandbox Code Playgroud)
但是把它与枚举联系起来要好得多.有没有办法做到这一点?
编辑
结果我不需要使用任何最终变量.这很简单:
switch (service) {
case REG:
Run Code Online (Sandbox Code Playgroud)
在我看到安德里亚的评论之前,我没有想到这一点.谢谢你的回答.
我有这个枚举:
public enum Digits {
ZERO(0);
private final int number;
private Digits(int number) {
this.number = number;
}
public int getValue(){
return number;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在另一个类中创建setter,我可以提供以下功能: - 我将给它整数值(在这种情况下为0),并且setter将枚举ZERO设置为我的本地变量Digits是可能的吗?非常感谢!
我想检查给定的坐标是否与数组有关.
public boolean checkBounds(int x, int y) {
try {
Object val = array[x][y];
return true;
} catch (ArrayIndexOutOfBoundsException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我能这样做吗?这是一种有效的方法吗?
有没有办法让它更小,我尝试使用 for 循环,但无法为每个可能的类型创建一个随机实例。
Random randFireworkEffect = new Random(5);
switch(randFireworkEffect.nextInt()) {
case 0:
e = FireworkEffect.builder().flicker(true).withColor(c).withFade(c).with(Type.BALL).trail(true).build();
break;
case 1:
e = FireworkEffect.builder().flicker(true).withColor(c).withFade(c).with(Type.BALL_LARGE).trail(true).build();
break;
case 2:
e = FireworkEffect.builder().flicker(true).withColor(c).withFade(c).with(Type.BURST).trail(true).build();
break;
case 3:
e = FireworkEffect.builder().flicker(true).withColor(c).withFade(c).with(Type.CREEPER).trail(true).build();
break;
case 4:
e = FireworkEffect.builder().flicker(true).withColor(c).withFade(c).with(Type.STAR).trail(true).build();
break;
}
Run Code Online (Sandbox Code Playgroud)