带有字符串的 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 块。