Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用开关将字符串与枚举值进行比较_Java_Enums - Fatal编程技术网

在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 {

  }

在那里我还有一个枚举

爪哇

我想比较typescript
PluginActions
和java
PickerActions

使用
如果
我可以使用:

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