2011-05-15 73 views
1

嘿,夥計們,我有一個簡單的問題。如果給定一個字符串值我怎麼能在我的枚舉類中獲得相應的int值?Quick Enum問題

例如:

給定一個字符串「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; 
    } 
} 
+0

你需要單獨的非單調intVals嗎?否則,您可以刪除該成員和getter和構造函數值,並使用枚舉序號。進一步更多,如果你願意讓這個字符串成爲枚舉,你會做... – MJB 2011-05-15 17:40:52

+1

「快速枚舉問題」不是一個好問題標題。 – 2011-05-15 17:53:54

+0

你在使用這個枚舉類的目的是什麼?我可能沒有最好的工具來完成這項工作。 – 2011-05-15 18:41:00

回答

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

你枚舉自動獲取的方法valueOf(String)給出一個枚舉名稱時,返回正確的枚舉。你可以覆蓋它也檢查你的strVal。或者,您可以編寫一個直接返回int值的實用程序函數。

+0

這對他的例子不起作用,因爲每個枚舉實例都包含一個單獨的字符串值(除了實例名稱),並且這是他希望用於查找的值。 – benjismith 2011-05-15 17:43:16

+0

@benjismith - 真夠了;我通過這篇文章讀得太快了。我正在修改我的答案。 – 2011-05-15 17:45:24

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更有意義的屬性名稱如果可能的話
0

我認爲你可以使用ordinal()。