使用字符串的switch语句中的常量表达式需要错误

Isu*_*uru 7 java string enums android switch-statement

我得到一个大致看起来像这样的JSON响应.

{
  "status": "success",
  "data": [
    {
      ....
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是在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;
}
Run Code Online (Sandbox Code Playgroud)

但是我在每种情况下都得到Constant expression required错误.

我检查返回的值Status.SUCCESS.toString()Status.FAIL.toString()这的确返回字符串.

知道为什么还会出现这个错误吗?

Bat*_*eba 20

case 语句必须是编译时可评估的.

有点像Status.SUCCESS.toString()不满足的东西.另一方面,字符串文字也是如此.

显而易见的解决方法是使用一个if块.