I have the following Enum:
public enum MyEnum{
A(10, \"First\"), //
B(20, \"Second\"), //
C(35, \"Other options\");
private Integer code;
This is a bit tricky because the values() method is static. You would actually need reflection, but there is a nice way to hide this using standard library functionality.
First, define an interface with the methods common to all of your enum types:
public interface Common {
Integer getCode();
String getDescription();
}
Then, make all your enums implement this interface:
public enum MyEnum implements Common {...}
The static method you want to have then looks like:
public static & Common> T getValueOf( Class type, Integer code ) {
final EnumSet values = EnumSet.allOf( type );
for(T e : values) {
if(e.getCode().equals( code )) {
return e;
}
}
throw new IllegalArgumentException( "No enum const " + type.getName() + " for code \'" + code + "\'" );
}