Java 快速枚举问题
嘿,伙计们,我有一个简短的问题。如果给定一个字符串值,如何在枚举类中获得相应的int值 例: 给定一个字符串“普通”,我希望返回值0。以下是我所拥有的: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
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重命名为更有意义的属性名称
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();
}