> In the implementation you provide, you use the enum valueOf(), which cannot be overriden, in order to map the 
> values in the constructors with the enum values.

Indeed. Maybe I was misunderstanding your code, but unless `equals` on Type is overridden `type.equals(value.type)` in the current implementation should have the same effect?

If, as @zack-shoylev suggests, we should support case-insensitive matching too, then `Type.valueOf` in my suggestion will of course need to be replaced something more like:
```
public static Type fromValue(String value) {
   if (value == null) {
      return null;
   }
   // Or compute the value in the Type class and expose a method lowercaseValues() there?
   // Or indeed simply add a `caseInsensitiveValueOf(String value)` method on Type?
   for (Type type : Type.values()) { 
      if (type.equalsIgnoreCase(value)) {
         return value;
      }
   }
   logger.warn("Unrecognized console type: %s", type); // or logger.debug or so?
   return UNRECOGNIZED;
}
```