在Java中使用开关将字符串与枚举值进行比较
注意:这不是的副本,因为该链接的解决方案已在此处应用在Java中使用开关将字符串与枚举值进行比较,java,enums,Java,Enums,注意:这不是的副本,因为该链接的解决方案已在此处应用 在带有typescript的Cordova应用程序中,我使用此枚举发送我的操作= 打字稿 enum PluginActions { PICK = "PICK", PICK_MULTIPLE = "PICK_MULTIPLE" } 我将其发送给cordova,在Java中,我将其作为我的方法中的actionstring变量 @Override public boolean execute(String action, JSO
在带有typescript的Cordova应用程序中,我使用此枚举发送我的操作= 打字稿
enum PluginActions {
PICK = "PICK",
PICK_MULTIPLE = "PICK_MULTIPLE"
}
我将其发送给cordova,在Java中,我将其作为我的方法中的action
string变量
@Override
public boolean execute(String action, JSONArray inputs, CallbackContext callbackContext) throws JSONException {
}
在那里我还有一个枚举
爪哇
我想比较typescriptPluginActions
和javaPickerActions
使用如果
我可以使用:
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建议,我以以下方式铸造枚举值:
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的错误
错误:枚举开关大小写标签必须是枚举常量的非限定名称
您可以在交换机中使用值,并在交换机中对其进行测试
但是,正如在评论中所说,如果您使用的值与您的任何值都不匹配,它将抛出一个错误
因此,在交换机中添加默认大小写是无用的。为了避免抛出不必要的异常,可以将值转换为,并在使用切换之前检查它是否与现有值匹配
您可以在交换机中使用值,并在交换机中进行测试
但是,正如在评论中所说,如果您使用的值与您的任何值都不匹配,它将抛出一个错误
因此,在交换机中添加默认大小写是无用的。为了避免抛出不必要的异常,可以将值转换为,并在使用切换之前检查它是否与现有值匹配
错误:枚举开关大小写标签必须是枚举常量的非限定名称,
您不应使用case PickerActions.PICK,而应仅使用case PICK,如下所示:
public class MainClass {
enum Choice { Choice1, Choice2, Choice3 }
public static void main(String[] args) {
Choice ch = Choice.Choice1;
switch(ch) {
case Choice1:
System.out.println("Choice1 selected");
break;
case Choice2:
System.out.println("Choice2 selected");
break;
case Choice3:
System.out.println("Choice3 selected");
break;
}
}
}
错误:枚举开关大小写标签必须是枚举常量的非限定名称,
您不应使用case PickerActions.PICK,而应仅使用case PICK,如下所示:
public class MainClass {
enum Choice { Choice1, Choice2, Choice3 }
public static void main(String[] args) {
Choice ch = Choice.Choice1;
switch(ch) {
case Choice1:
System.out.println("Choice1 selected");
break;
case Choice2:
System.out.println("Choice2 selected");
break;
case Choice3:
System.out.println("Choice3 selected");
break;
}
}
}
打开PickerActions.valueOf(action)
并将实际枚举值放入case
块:case PickerActions.PICK
@GauravJeswani该链接显示了类似的问题,但解决方法是使用枚举,我已经在这样做了。@Arnaud我尝试了,但又出现了一个错误<代码>错误:枚举开关大小写标签必须是枚举常量的非限定名称
(我已用该信息更新了我的问题)可能与开关打开的PickerActions重复。valueOf(action),并将实际枚举值放入case
块中:case PickerActions.PICK
@GauravJeswani该链接显示了类似的问题,但解决方法是使用枚举,这是我正在做的。@Arnaud我尝试了,但又出现了一个错误<代码>错误:枚举开关大小写标签必须是枚举常量的非限定名称(我已用该信息更新了我的问题)。如果字符串与有效的枚举不对应,这将引发异常。在任何用例中都不会命中默认值。如果字符串与有效枚举不对应,则会引发异常。在任何情况下都不会达到默认值。
public class MainClass {
enum Choice { Choice1, Choice2, Choice3 }
public static void main(String[] args) {
Choice ch = Choice.Choice1;
switch(ch) {
case Choice1:
System.out.println("Choice1 selected");
break;
case Choice2:
System.out.println("Choice2 selected");
break;
case Choice3:
System.out.println("Choice3 selected");
break;
}
}
}