if (StringUtils.isEmpty(name)) { throw new IllegalArgumentException("The Enum name must not be empty or null"); }
init(name, getClass());
    protected Enum(String name) {        super();        if (StringUtils.isEmpty(name)) {            throw new IllegalArgumentException("The Enum name must not be empty or null");        }        iName = name;        Class enumClass = Enum.getEnumClass(getClass());        Entry entry = (Entry) cEnumClasses.get(enumClass);        if (entry == null) {            entry = createEntry(getClass());            cEnumClasses.put(enumClass, entry);        }        if (entry.map.containsKey(name)) {            throw new IllegalArgumentException("The Enum name must be unique, '" + name + "' has already been added");        }        entry.map.put(name, this);        entry.list.add(this);                iHashCode = 7 + enumClass.hashCode() + 3 * name.hashCode();        // cannot create toString here as subclasses may want to include other data    }