Java 快速枚举问题

Java 快速枚举问题,java,enums,Java,Enums,嘿,伙计们,我有一个简短的问题。如果给定一个字符串值,如何在枚举类中获得相应的int值 例: 给定一个字符串“普通”,我希望返回值0。以下是我所拥有的: public enum MembershipTypes { ORDINARY(0,"Ordinary"), WORKING(1,"Working"), CORE(2,"Core"), COORDINATOR(3,"Coordinator"); private int intVal; priva

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

例:

给定一个字符串“普通”,我希望返回值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;
    }
}

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

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

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);
}
使用:

private static final Map MEMBERSHIP\u TYPES=新HashMap;
静止的{
对于(MembershipTypes membershipType:values()){
membershipType.put(membershipType.strVal,membershipType);
}
}
公共静态int-getIntVal(字符串strVal){
if(!MEMBERSHIP_TYPES.containsKey(strVal){
抛出新的IllegalArgumentException(“未知值:+strVal”);
}
返回成员资格_TYPES.get(strVal.getIntVal();
}
考虑:

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

我认为您可以使用序数()。

您需要单独的非单调整数吗?否则您可以删除该成员、getter和构造函数值,而只使用枚举序数。此外,如果您愿意将字符串作为枚举,您将完成…“快速枚举问题”不是一个好的问题标题。您使用此枚举类的目的是什么?我可能没有用于此工作的最佳工具。这对他的示例不起作用,因为每个枚举实例都包含一个单独的字符串值(除了实例名称之外),这就是他想用于查找的值。@benjismith-没错;我读这篇文章太快了。我正在修改我的答案。
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();
}