带有字符串的 switch 语句中需要常量表达式错误
Constant expression required error in switch statement with strings
我收到一个 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;
}
但我在每种情况下都收到 需要常量表达式 错误。
我检查了 return 由 Status.SUCCESS.toString()
和 Status.FAIL.toString()
编辑的值,这确实是 return 个字符串。
知道为什么仍然会出现此错误吗?
case
语句必须是编译时可评估的。
Status.SUCCESS.toString()
之类的东西不能满足这一点。另一方面,字符串 literal 确实如此。
明显的解决方法是使用一个 if
块。
我收到一个 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;
}
但我在每种情况下都收到 需要常量表达式 错误。
我检查了 return 由 Status.SUCCESS.toString()
和 Status.FAIL.toString()
编辑的值,这确实是 return 个字符串。
知道为什么仍然会出现此错误吗?
case
语句必须是编译时可评估的。
Status.SUCCESS.toString()
之类的东西不能满足这一点。另一方面,字符串 literal 确实如此。
明显的解决方法是使用一个 if
块。