Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带字符串的switch语句中出现常量表达式必需错误_Java_Android_String_Enums_Switch Statement - Fatal编程技术网

Java 带字符串的switch语句中出现常量表达式必需错误

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;

我得到一个JSON响应,大致如下所示

{
  "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你不是最优雅的东西,但好吧,该怎么办。再次感谢……但为什么呢?