Java provides a valueOf() method for every Enum<T> object, so given an enum like
public enum Day {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
one can do a lookup like
Day day = Day.valueOf("Monday");
If the string passed to valueOf() does not match (case sensitive) an existing Day value, an IllegalArgumentException is thrown.
To do a case-insensitive matching, one can write a custom method inside the Day enum, e.g.
public static Day lookup(String day) {
for (Day d : Day.values()) {
if (d.name().equalsIgnoreCase(day)) {
return type;
}
}
return null;
}
Is there any generic way, without using caching of values or any other extra objects, to write a static lookup() method like the above only once (i.e., not for every enum), given that the values() method is implicitly added to the Enum<E> class at compile time?
The signature of such a "generic" lookup() method would be similar to the Enum.valueOf() method, i.e.:
public static <T extends Enum<T>> T lookup(Class<T> enumType, String name);
and it would implement exactly the functionality of the Day.lookup() method for any enum, without the need to re-write the same method for each enum.