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 action
variable 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 PluginActions
vs el java PickerActions
.
Usando if
puedo 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
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;
}
}