【发布时间】:2015-11-02 03:29:12
【问题描述】:
我收到一个大致如下所示的 JSON 响应。
{
"status": "success",
"data": [
{
....
}
]
}
status 字段可以有两个值:成功或失败。
所以在我的代码中,我有以下枚举。
private enum Status {
SUCCESS("success", 0),
FAIL("fail", 1);
private String stringValue;
private int intValue;
private Status(String toString, int value) {
stringValue = toString;
intValue = value;
}
@Override
public String toString() {
return stringValue;
}
}
我要做的是在switch语句中,我需要检查状态值并在每个条件下执行代码。
String status = jsonObj.getString("status");
switch (status) {
case Status.SUCCESS.toString():
Log.d(LOG_TAG, "Response is successful!");
case Status.FAIL.toString():
Log.d(LOG_TAG, "Response failed :(");
default:
return;
}
但我在每种情况下都得到需要常量表达式错误。
我检查了Status.SUCCESS.toString() 和Status.FAIL.toString() 返回的值,它们确实返回了字符串。
知道为什么还会出现这个错误吗?
【问题讨论】:
-
不要忘记
break。switch(Status.fromValue(status)) { case Success: -
我没有投反对票,但我猜你得到了这样的回应,因为 Java switch 语句是一种基本的语言功能,并且可以通过 Google 轻松获得信息。
-
你为什么不直接写
case "success":和case "failure":? -
@DavidWallace:我想这样做意味着在不止一个地方输入“成功”,打破en.wikipedia.org/wiki/Don%27t_repeat_yourself
-
是的,但替代方法是使用
valueOf方法,然后在Enum上使用switch;这是有问题的,因为如果String错误,它会引发异常。
标签: java android string enums switch-statement