相关疑难解决方法(0)

将枚举保存到SharedPreference

我想知道,什么是正在使用的常见的方法来保存EnumSharedPrefereces?目前,我正在使用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)

我在想,这是一个好方法吗?有没有更好的方法?

android

34
推荐指数
3
解决办法
2万
查看次数

使用特定于该枚举的int设置枚举?

大家好.所以我有一组枚举和一个带有与这些枚举相对应的整数的数据库.像这样的东西,例如:

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值并返回一个枚举器,而不必为这个集合中的许多枚举创建一个新方法.也许我应该把它作为自己的类而不是枚举器,但我希望这样做.谢谢!

java enums

17
推荐指数
3
解决办法
2万
查看次数

来自Enum的常量表达式

有没有办法将枚举转换为常量表达式?我希望我的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)

在我看到安德里亚的评论之前,我没有想到这一点.谢谢你的回答.

java compile-time-constant

6
推荐指数
1
解决办法
1万
查看次数

将枚举值与整数相关联

我有这个枚举:

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是可能的吗?非常感谢!

java enums

6
推荐指数
1
解决办法
1377
查看次数

是否可以使用异常来检查数组边界?

我想检查给定的坐标是否与数组有关.

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)

我能这样做吗?这是一种有效的方法吗?

java exception indexoutofboundsexception range-checking

5
推荐指数
1
解决办法
999
查看次数

我可以让这个 switch 语句更小吗?最好有 for 循环

有没有办法让它更小,我尝试使用 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)

java bukkit

-1
推荐指数
1
解决办法
112
查看次数