【发布时间】:2018-08-29 06:00:33
【问题描述】:
我的代码中有一个 switch case,它在字符串常量上定义了 case。
如果我将字符串常量初始化为
String INACTIVE = "INACTIVE";
开关盒工作正常。
但是,如果我使用枚举初始化字符串常量
String INACTIVE = State.INACTIVE.name();
我在 switch case 上得到一个编译时错误
需要常量表达式
我正在使用 MVP 架构,我的 State Enum 只能在 Presenter 中使用,而我的 switch case 在 Activity 视图中。
我不想在视图中复制枚举,记住代码维护问题。
这迫使我为我的 switch 案例单独定义字符串常量,但它不允许我使用 State 枚举值初始化常量。
提前感谢任何有用的建议和解决方案。
【问题讨论】:
-
能否请您显示枚举实现
-
See here 以及下面的重复链。你不能这样做,但也许你无论如何都不应该这样做。只在 util/static 类的某处定义字符串常量会有什么问题?我的意思是,为什么首先要使用枚举?
-
这就是
Java的工作原理。case只能通过一个常量值,而 Java 无法证明INACTIVE.name()将始终返回相同的值。 -
@Zeba 只是切换到枚举,不需要切换到通过枚举检索到的字符串。我的意思是:您可以将每个枚举关联到一个 id(例如,默认情况下是渐进 int),甚至可以使用名称字符串,并在活动之间传递它;然后一旦收到,让枚举类通过给定的整数(或字符串)返回枚举,然后你可以通过枚举进行切换。如果你知道如何使用 Enum,它是一个非常强大的类。
标签: java android enums switch-statement constants