Camilla Camilla - 6 months ago 18
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

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.

Comments