我的代码中有一个转换用例,其中有用String常量定义的用例。
如果我将String常量初始化为
String INACTIVE = "INACTIVE";
开关盒工作正常。
但是,如果我使用枚举作为
初始化String常量,String INACTIVE = State.INACTIVE.name();
我在switch案例中看到一个编译时错误
需要常量表达式
我正在使用MVP架构,而状态枚举只能在Presenter中使用,而我的切换案例在Activity视图中。
我不想在视图中重复枚举,同时要记住代码维护问题。
这迫使我为我的切换情况分别定义String常量,但是这不允许我使用State枚举值初始化常量。
提前感谢任何有用的建议和解决方案。
答案 0 :(得分:1)
这样做:
public enum State {
INACTIVE {
@Override
public int getId() {
return 0;
}
},
ACTIVE {
@Override
public int getId() {
return 1;
}
},
CURRENT {
@Override
public int getId() {
return 2;
}
};
public abstract int getId();
public State getStateById(int id) {
if (id == 0) {
return INACTIVE;
} else if (id == 1) {
return ACTIVE;
} else if (id == 2) {
return CURRENT;
}
// this should never happen
throw new RuntimeException("Shouldn't");
};
}
因此,基本上,您使用一个ID在Presenter和ActivityView之间传递,然后使用枚举类本身来解析该ID并检索该枚举,您可以在切换案例中直接使用它。 在我的示例中,我仅使用int来显示所有详细信息,但是如果您依赖getName()并直接解析String,则根本不需要覆盖任何方法。