web-dev-qa-db-ja.com

文字列を含むswitchステートメントで定数式が必要なエラー

おおよそ次のようなJSON応答が返されます。

_{
  "status": "success",
  "data": [
    {
      ....
    }
  ]
}
_

statusフィールドには、successまたはfailの2つの値を指定できます。 -)。

だから私のコードでは、次の列挙型があります。

_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()によって返される値を確認しました。

このエラーがまだ発生する理由はありますか?

9
Isuru

caseステートメントは、コンパイル時に評価可能でなければなりません。

Status.SUCCESS.toString()のようなものはそれを満たしていません。一方、文字列literalは使用します。

明らかな修正は、ifブロックを使用することです。

20
Bathsheba