Java 在 case 语句中使用变量

标签 java

所以,我知道您不能在 case 语句中使用变量。我希望有人能指出我作为替代品相当有效的代码。 (例如,我可以做一堆如果)。

情况是我有一个对象数据数组,我想遍历该数组。数组中的位置由名称给出,如下所示(int...ordinal 语句)。基本上我必须为数组的某些成员分配生成“结果”对象(如果它们是离散数据,例如 C_VENT_RATE)。我可以轻松完成此操作的唯一方法是做一堆 ifs,例如 if (i.equals(pr_int))。

  ArrayList<String[]> rawEKGs  = ekgFile.getForMrno( docInfo.getMedicalRecordNumber() );

  for (String[] parts : rawEKGs) {
    for (int i=0; i< parts.length; i++ )
    {
      Result result = docInfo.getResult();
      boolean process = true;
      final int vent_rate = UncEKG.COL_NAMES.C_VENT_RATE.ordinal();
      int art_rate = UncEKG.COL_NAMES.C_ART_RATE.ordinal();
      int pr_int = UncEKG.COL_NAMES.C_PR_INTERVAL.ordinal();
      int qrs_dur =  UncEKG.COL_NAMES.C_QRS_DURATION.ordinal();
      int qt_qtc =  UncEKG.COL_NAMES.C_QT_QTC.ordinal();
      int prt =  UncEKG.COL_NAMES.C_PRT_AXES.ordinal();


      switch(i) {
        case : // something
          break;
        default: process = false;
      }

最佳答案

因为您已经有了一个枚举,您可以尝试使用 EnumMap 将枚举映射到命令的 Command 模式。

每个 Command 实例都将与您的一个 case 语句具有相同的逻辑。

EnumMap<UncEKG.COL_NAMES, Command> map = ...
//values is in ordinal order
//pulled out for performance reasons
UncEKG.COL_NAMES[] names = UncEKG.COL_NAMES.values();
for (String[] parts : rawEKGs) {
    for (int i=0; i< parts.length; i++ ){
       map.get(names[i]).execute();
    }
}

关于Java 在 case 语句中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125596/

相关文章:

java - struts2 中的国际化

java - 通用数组如何添加set方法?

java - 保存元素和每个元素各自的计数的数据结构?

java - 字符串与文字 java == interned 字符串比较

java - 如何为 SFTP (Java) 创建帐户或用户?

java - 使用循环分配按钮

Java Swing : how do I properly instantiate GUI and pass domain objects?

java - 我怎样才能让这个 for 循环更短?

java - 我的类(class)线程安全吗?如果不是为什么?

java - 用空数据拆分字符串