Java 带字符串的switch语句中出现常量表达式必需错误
我得到一个JSON响应,大致如下所示Java 带字符串的switch语句中出现常量表达式必需错误,java,android,string,enums,switch-statement,Java,Android,String,Enums,Switch Statement,我得到一个JSON响应,大致如下所示 { "status": "success", "data": [ { .... } ] } 状态字段可以有两个值:成功或失败 因此,在我的代码中,我有以下枚举 private enum Status { SUCCESS("success", 0), FAIL("fail", 1); private String stringValue; private int intValue;
{
"status": "success",
"data": [
{
....
}
]
}
状态
字段可以有两个值:成功或失败
因此,在我的代码中,我有以下枚举
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()
返回的值,它们确实返回字符串
知道为什么仍然会发生此错误吗?
case
语句必须是编译时可计算的
类似于Status.SUCCESS.toString()
的东西不能满足这一要求。另一方面,字符串文字则不起作用
显而易见的解决方法是使用
if
块。不要忘记中断switch(Status.fromValue(Status)){case Success:
我没有投反对票,但我想你得到了这个回答,因为Java switch语句是一种基本的语言功能,而且信息可以通过Google随时获得。你为什么不干脆写case“Success”:
和case“failure”:
?@DavidWallace:我想这样做意味着键入“success”在不止一个地方,打破Yes,但另一种选择是使用valueOf
方法,然后在Enum
上使用switch
;这是有问题的,因为如果字符串
错误,它会引发异常。我认为是一样的。使用if-else就足够了。这很有效!if
语句a你不是最优雅的东西,但好吧,该怎么办。再次感谢……但为什么呢?