I have the following Enum:
public enum MyEnum{ A(10, "First"), // B(20, "Second"), // C(35, "Other options"); private Integer code; private String description; private MyEnum(Integer code, String description) { this.code = code; this.description = description; } public Integer getCode() { return code; } public String getDescription() { return description; } public static MyEnum getValueOf(Integer code) { for (MyEnum e : MyEnum.values()) { if (e.getCode().equals(code)) { return e; } } throw new IllegalArgumentException("No enum const " + MyEnum.class.getName() + " for code \'" + code + "\'"); } } Which works fine. The getValueOf-method exists because when communicating with an external partner, we only get the code (they chose) to map to. I need the description because I need to show a meaningfull phrase in the GUI.
But I now have a number of similar enum classes. All having their own code & description, and they need the same lookup functionality. I wanted the getValueOf-method to be generic so I don't need to support 30+ different enums for basically the same method.
To solve this I wanted to make an abstract class to define this method and implement some of the common logic but this is impossible because I can't extend Enum.
Then I tried to make a Utility class with the following method:
public static > T getValueOf(Enum type, Integer code) {...} But generics with Enums are confusing and I don't understand how to get this working.
Basically what I want to know is: What is a good approach to define a common utility to an enum?