package java.lang; import java.lang.reflect.Method; public abstract class Enum> { private final String name; private final int ordinal; public Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } public int compareTo(E other) { return ordinal - other.ordinal; } public static > T valueOf(Class enumType, String name) { if (name != null) { try { Method method = enumType.getMethod("values"); Enum values[] = (Enum[])(method.invoke(null)); for (Enum value : values) { if (name.equals(value.name)) { return (T) value; } } } catch (Exception ex) { throw new RuntimeException(ex); } } return null; } public int ordinal() { return ordinal; } public String toString() { return name; } }