¿Cómo puedo obtener el nombre de un Java de tipo Enum dado su valor?

Tengo el siguiente código que funciona para una particular tipo Enum, puedo hacer más genérico?

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;
    }
}
  • Hay una razón especial por la que desea utilizar algo más que el nombre() de la Enumeración para mirar a ellos? Que pueda confundir a un montón de gente, y usted también puede utilizar un simple Category.valueOf(name).
  • Realmente podemos hacerlo más genérico? Estoy usando un montón de nameOf(String name), ahora cada que voy a escribir un *Enum.values().stream().filter(...).findAny().get(), que es tan molesto.
InformationsquelleAutor Julia | 2010-10-08

4 Comentarios

  1. 26

    Tratar a continuación el código

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

    Ahora usted puede utilizar a continuación el código para recuperar la Enumeración por Valor

    SalaryHeadMasterEnum.getEnumByString("Basic Pay")

    Utilizar a Continuación el código para obtener ENUM como Cadena

    SalaryHeadMasterEnum.BASIC_PAY.name()

    Utilizar a continuación el código para obtener un Valor de cadena para la enumeración

    SalaryHeadMasterEnum.BASIC_PAY.toString()
    • code == e.name no va a funcionar de la manera que usted quiere que, debe ser e.name.equals(code) lugar
    • hizo probar el código anterior??
    • Bueno, sí: SalaryHeadMasterEnum.getEnumByString("basic pay") hace el trabajo, sino que se basa en la JVM de la fusión de los literales de Cadena. Cosas como SalaryHeadMasterEnum.getEnumByString(new StringBuilder("basic ").append("pay").toString()) no, pero debería en mi humilde opinión. El uso de String.equals() haría tanto el trabajo 😉
    • – para la comparación de cadenas de caracteres con ==, que es mala, y para el uso de una variable «nombre» con un significado diferente que el nombre de ‘()’ método
  2. 5

    Tratar, el siguiente código..

        @Override
        public String toString() {
        return this.name();
        }
    • Esto debería funcionar bien, pero ¿por qué llamar a la función toString() en lugar de getName() (O algo similar) ?
  3. 1

    Aquí está el código a continuación, se le devolverá el Enum nombre de valor de Enumeración.

    public enum Test {
    
        PLUS("Plus One"), MINUS("MinusTwo"), TIMES("MultiplyByFour"), DIVIDE(
                "DivideByZero");
        private String operationName;
    
        private Test(final String operationName) {
            setOperationName(operationName);
        }
    
        public String getOperationName() {
            return operationName;
        }
    
        public void setOperationName(final String operationName) {
            this.operationName = operationName;
        }
    
        public static Test getOperationName(final String operationName) {
    
            for (Test oprname : Test.values()) {
                if (operationName.equals(oprname.toString())) {
                    return oprname;
                }
            }
            return null;
        }
    
        @Override
        public String toString() {
            return operationName;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
    
            Test test = Test.getOperationName("Plus One");
            switch (test) {
            case PLUS:
                System.out.println("Plus.....");
                break;
            case MINUS:
                System.out.println("Minus.....");
                break;
    
            default:
                System.out.println("Nothing..");
                break;
            }
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here