web-dev-qa-db-fra.com

Expression constante requise erreur dans l'instruction switch avec des chaînes

J'obtiens une réponse JSON qui ressemble approximativement à ceci.

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

Le champ status peut avoir deux valeurs: succès ou échec .

Donc, dans mon code, j'ai l'énumération suivante.

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;
    }
}

Ce que je veux faire, c'est dans une instruction switch, je dois vérifier la valeur d'état et exécuter le code dans chaque condition.

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;
}

Mais j'obtiens l'erreur expression constante requise dans chaque cas.

J'ai vérifié la valeur renvoyée par Status.SUCCESS.toString() et Status.FAIL.toString() qui retournent en effet des chaînes.

Une idée pourquoi cette erreur se produit toujours?

9
Isuru

Les instructions case doivent être évaluables à la compilation.

Quelque chose comme Status.SUCCESS.toString() ne satisfait pas cela. Une chaîne littérale, d'autre part, fait.

La solution évidente consiste à utiliser un bloc if.

20
Bathsheba