Camilla Camilla - 1 year ago 83
Java Question

get enum name from enum value

I've read a lot about how obtain the corresponding name of an

enum
from its value using java, but no example seems to work for me! What is wrong?



public class Extensions {


public enum RelationActiveEnum
{
Invited(0),
Active(1),
Suspended(2);

private final int value;

private RelationActiveEnum(final int value) {
this.value = value;
}
}


}

and in another class I use:

int dbValue = supp.ACTIVE;
Extensions.RelationActiveEnum enumValue(dbValue);
String stringName = enumValue.toString(); //Visible
// OR
int dbValuee = supp.ACTIVE;
String stringValue = Enum.GetName(typeof(RelationActiveEnum), dbValue);


I should work, right? but it doesn't!!!! it tells me that dbValue cannote be cast to RelationActiveEnum...

Answer Source

Since your 'value' also happens to match with ordinals you could just do:

public enum RelationActiveEnum {
    Invited,
    Active,
    Suspended;

    private final int value;

    private RelationActiveEnum() {
        this.value = ordinal();
    }
}

And getting a enum from the value:

int value = 1;
RelationActiveEnum enumInstance = RelationActiveEnum.values()[value];

I guess an static method would be a good place to put this:

public enum RelationActiveEnum {
     public static RelationActiveEnum fromValue(int value) 
             throws IllegalArgumentException {
         try {
              return RelationActiveEnum.values()[value]
         } catch(ArrayIndexOutOfBoundsException e) {
              throw new IllegalArgumentException("Unknown enum value :"+ value);
         }
     }
}   

Obviously this all falls apart if your 'value' isn't the same value as the enum ordinal.