Java获得Enum值的Enum名称

Jul*_*lia 49 java enums enumeration

如何获取Java Enum类型的名称?

我有以下代码适用于特定的枚举类型,我可以使它更通用吗?

public enum Category {

    APPLE("3"), 
    ORANGE("1"), 

    private final String identifier;

    private Category(String identifier) {
        this.identifier = identifier;
    }

    public String toString() {
        return identifier;
    }

    public static String getEnumNameForValue(Object value){
        Category[] values = Category.values();
        String enumValue = null;
        for(Category eachValue : values) {
            enumValue = eachValue.toString();

            if (enumValue.equalsIgnoreCase(value)) {
                return eachValue.name();
            }
        }
        return enumValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

Rid*_*del 42

您应该getEnumNameForValue通过调用name()方法来替换您.

  • @trashgod:她正在重写toString (5认同)
  • @Jukia:另外,考虑覆盖`toString()`:http://download.oracle.com/javase/6/docs/api/java/lang/Enum.html#toString%28%29 (2认同)

pra*_*kre 27

试试下面的代码

public enum SalaryHeadMasterEnum {

    BASIC_PAY("basic pay"),
    MEDICAL_ALLOWANCE("Medical Allowance");

    private String name;

    private SalaryHeadMasterEnum(String stringVal) {
        name=stringVal;
    }
    public String toString(){
        return name;
    }

    public static String getEnumByString(String code){
        for(SalaryHeadMasterEnum e : SalaryHeadMasterEnum.values()){
            if(code == e.name) return e.name();
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用下面的代码来按值检索枚举

SalaryHeadMasterEnum.getEnumByString("Basic Pay")
Run Code Online (Sandbox Code Playgroud)

使用下面的代码将ENUM作为String

SalaryHeadMasterEnum.BASIC_PAY.name()
Run Code Online (Sandbox Code Playgroud)

使用下面的代码来获取枚举的字符串值

SalaryHeadMasterEnum.BASIC_PAY.toString()
Run Code Online (Sandbox Code Playgroud)

  • `code == e.name`不会像你想象的那样工作,应该是`e.name.equals(code)` (4认同)
  • 嗯,是的:`SalaryHeadMasterEnum.getEnumByString("basic pay")`确实有效,但依赖于JVM合并字符串文字.像`SalaryHeadMasterEnum.getEnumByString(new StringBuilder("basic").append("pay").toString())`的东西不是,但应该恕我直言.使用`String.equals()`会使两者都工作;-) (4认同)
  • -比较带有==的字符串很不好,并使用与'name()'方法含义不同的变量'name' (2认同)

小智 5

试试,以下代码..

    @Override
    public String toString() {
    return this.name();
    }
Run Code Online (Sandbox Code Playgroud)