Примечание: это не дубликат оператора переключения Java: требуется постоянное выражение, но оно является константой , потому что решение этой ссылки уже применено здесь.
Inприложение Cordova с машинописью Я использую это перечисление для отправки своих действий =
машинопись
enum PluginActions {
PICK = "PICK",
PICK_MULTIPLE = "PICK_MULTIPLE"
}
Я отправляю это в Cordova, и в Java я получаю это как строковую переменную action
в моемметод.
@Override
public boolean execute(String action, JSONArray inputs, CallbackContext callbackContext) throws JSONException {
}
Там у меня также есть перечисление.
Java
enum PickerActions {
PICK, PICK_MULTIPLE
}
Я хочу сравнить машинопись PluginActions
с Java PickerActions
.
Использование if
Я могу сделать это с помощью:
if (action.equals(PickerActions.PICK.name())) { }
, но я хочу сделать это с помощью переключателя, чтобы я мог легко добавить больше действий
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;
}
Но я получаю там ошибку: error: constant string expression required
Есть ли способ использовать имя строки перечисления в операторе switch?
Редактировать:
Какв соответствии с рекомендацией @Arnaud я привел значение enum следующим образом:
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;
}
Но я получаю еще одну ошибку, касающуюся ошибки case PickerAction.Pick
: метка регистра переключателя перечислениядолжно быть безусловным именем константы перечисления