【问题标题】:Get index of enum from string?从字符串中获取枚举索引?
【发布时间】:2013-03-15 15:52:47
【问题描述】:

我有一个字符串值,我还有一个字符串数组和一个包含范围的枚举。 要获取数组中字符串的索引,从提供的值中我写了这个:

Arrays.asList(myClass.BAUD_RATES).indexOf(username)

如何为枚举执行此操作?我可以使用序数吗?还是我必须自己制作方法?

方法可能是这样的:

public enum Fruit {
   ...
   static public boolean isMember(String aName) {
       Fruit[] aFruits = Fruit.values();
       for (Fruit aFruit : aFruits)
           if (aFruit.fruitname.equals(aName))
               return aFruit;
       return false;
   }
   ...
}

【问题讨论】:

    标签: java android enums


    【解决方案1】:

    不确定我是否理解正确,但根据您可能正在寻找的问题标题

    YourEnum.valueOf("VALUE").ordinal();
    
    1. YourEnum.valueOf("VALUE") 返回枚举 value 名称为 "VALUE"
    2. 每个枚举都知道它的位置(从零开始索引),我们可以通过调用它的ordinal()方法来获得它。

    【讨论】:

    • 感谢大家的回答,这些都有效,显然这不是我的问题。问题是,如果我搜索库,比如字符串数组中的 9600,它可以正常工作。但是当我在枚举中搜索相同的值时,它说它不是枚举中的值。 03-15 16:04:19.925: E/AndroidRuntime(19719): Caused by: java.lang.IllegalArgumentException: 19200 不是 slickdevlabs.apps.usb2seriallib.SlickUSB2Serial$BaudRate 中的常数,所以我将只使用字符串数组。 ..不知道为什么会这样。幸运的是,图书馆也提供了一个字符串数组。
    【解决方案2】:

    我可能不明白你的问题,但同样的代码也适用于枚举:

    int index = Arrays.asList(YourEnum.values()).indexOf(YourEnum.ENUM_ITEM);
    

    或者你可以得到:

    int index = YourEnum.valueOf("ENUM_ITEM").ordinal();
    

    【讨论】:

      【解决方案3】:

      试试这个简单的解决方案:

      Fruit.values()[index]
      

      【讨论】:

        【解决方案4】:

        如果要检索索引,可以使用序数。如果你想给 String 分配一些特定的值,你可以定义自己的方法来检索它。

         enum DAY
         {
          MONDAY(10),
          TUESDAY(20);
          int value;
          DAY(int x)
          {
           this.value = x;
          }
          public int getValue()
          {
            return value;
           }
        

        现在值和序号可以检索为:

            for(DAY s : DAY.values() )
            {
                System.out.println(s.ordinal());
                System.out.println(s.getValue());
            }
        

        【讨论】:

          【解决方案5】:

          下面的逻辑也可以。

          如果您想检查并且知道fruitname 已经不使用for 循环,请使用Pshemo 提到的方法

          for (Fruit aFruit : aFruits)
                     if (aFruit.name().equals(aName))
                         return aFruit.ordinal();
          

          【讨论】:

            猜你喜欢
            • 2017-12-06
            • 1970-01-01
            • 2017-08-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多