快速枚举问题

时间:2011-05-15 17:34:19

标签: java enums

嘿伙计们,我有一个简单的问题。如果给定一个字符串值,我如何在我的枚举类中获得相应的int值?

例如:

给定一个字符串“Ordinary”我希望返回值0。这就是我所拥有的:

public enum MembershipTypes 
{
    ORDINARY(0,"Ordinary"),
    WORKING(1,"Working"),
    CORE(2,"Core"),
    COORDINATOR(3,"Coordinator");

    private int intVal;
    private String strVal;

    /**
     * 
     * @param intValIn
     * @param strValIn
     */
    MembershipTypes(int intValIn, String strValIn)
    {
        intVal = intValIn;
        strVal = strValIn;
    }

    /**
     * 
     * Gets the integer value
     * @return intVal
     */
    public int getIntVal() 
    {
        return intVal;
    }

    /**
     * 
     * Gets the string value
     * @return strVal
     */
    public String getStrVal() 
    {
        return strVal;
    }
}

4 个答案:

答案 0 :(得分:1)

这是最简单的方法。将此静态方法添加到枚举:

public static int getIntValForString(String strVal) {
   for (MembershipTypes e : MembershipTypes.values()) {
      if (e.getStrVal().equals(strVal)) {
         return e.getIntVal();
      }
   }
   throw new IllegalArgumentException("No such enum for string val:" + strVal);
}

答案 1 :(得分:1)

使用:

private static final Map<String, MEMBERSHIP_TYPES> MEMBERSHIP_TYPES = new HashMap<String, MembershipTypes>;
static {
  for (MembershipTypes membershipType : values()){
     MEMBERSHIP_TYPES.put(membershipType.strVal, membershipType);
  }
}

public static int getIntVal(String strVal){
  if (! MEMBERSHIP_TYPES.containsKey(strVal){
     throw new IllegalArgumentException("Unknown value: " + strVal);
  }
  return MEMBERSHIP_TYPES.get(strVal).getIntVal();
}

考虑:

  • 将MembershipTypes重命名为MembershipType
  • 如果可能,将intVal和strVal重命名为更有意义的属性名称

答案 2 :(得分:0)

您的枚举会自动获取方法valueOf(String),该方法在给定枚举名称时返回正确的枚举。您可以覆盖它以检查strVal。或者,您可以编写一个直接返回int值的实用程序函数。

答案 3 :(得分:0)

我认为你可以使用ordinal()。