Comparar con cadena de valor de enumeración con el interruptor en Java

ahora:

Nota: Esto no es un duplicado de la sentencia switch de Java: la expresión constante necesaria, pero es constante debido a que la solución a ese enlace ya se aplica aquí.


En una aplicación de Cordova con un manuscrito que utilizo esta enumeración para enviar mis acciones =

mecanografiado

enum PluginActions {
   PICK = "PICK",
   PICK_MULTIPLE = "PICK_MULTIPLE"
}

Yo envío a Córdoba y que en Java que conseguir eso como una actionvariable de cadena en mi método.

@Override
  public boolean execute(String action, JSONArray inputs, CallbackContext callbackContext) throws JSONException {

  }

Allí también tienen una enumeración.

Java

enum PickerActions {
  PICK, PICK_MULTIPLE
}

Quiero comparar el texto mecanografiado PluginActionsvs el java PickerActions.

Usando ifpuedo hacerlo usando:

if (action.equals(PickerActions.PICK.name())) { }

pero me wan a hacerlo con un interruptor para que pueda añadir fácilmente más acciones

  switch (action) {
    case PickerActions.PICK.name():
      JSONObject filters = inputs.optJSONObject(0);
      this.chooseFile(filters, callbackContext);
      return true;
    default:
    Log.w(this.LOGGER_TAG, "No function was found for " + action);
    return false;      
  }

Pero me da un error que hay: error: constant string expression required

¿Hay una manera de utilizar un nombre de cadena enumeración en una sentencia switch?

Editar:

Según la recomendación @Arnaud I Casted el valor de la enumeración de esta manera:

final PickerActions pickerAction = FilePickerActions.valueOf(action);

    switch (pickerAction ) {
      case PickerActions.PICK:
        JSONObject filters = inputs.optJSONObject(0);
        this.chooseFile(filters, callbackContext);
        return true;
      default:
      Log.w(this.LOGGER_TAG, "No function was found for " + action);
      return false;      
    }

Pero consigo otro error que hay respecto case PickerAction.Pick

Error: una etiqueta de caja de conmutación enum debe ser el nombre no calificado de una constante de enumeración

Pablo :

Sugiero sus valores de cadena para su uso enumeración de Java:

private enum PickerActions {
    PICK("PICK"),
    PICK_MULTIPLE("PICK_MULTIPLE");
    private final String value;
    PickerActions(final String value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return value;
    }
}

private static boolean test(String test) {
     switch (PickerActions.valueOf(test)) {
        case PICK:
            //
            return true;
        case PICK_MULTIPLE:
            //
            return false;
        default:
            // Log.w(this.LOGGER_TAG, "No function was found for " + test);
            return false;      
    }
}

Aquí está un ejemplo de trabajo

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=316498&siteId=1
Recomendado
Clasificación