DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15439>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15439 Enum does not support inner sub-classes Summary: Enum does not support inner sub-classes Product: Commons Version: 1.0.1 Final Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Normal Priority: Other Component: Lang AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] The org.apache.commons.lang.enum.Enum class does not support the following construct of static inner anonymous sub-classed constants: public abstract class MyEnum extends Enum { public static final MyEnum ENUM1 = new MyEnum("enum1") { public String getValue() { return "X"; } }; public static final MyEnum ENUM2 = new MyEnum("enum2") { public String getValue() { return "Y"; } }; /** * Constructor. */ protected MyEnum(String name) { super(name); } /** * Returns a value. * Creation date: (16/12/2002 13:25:35) */ public abstract String getValue(); } ENUM1 and ENUM2 are assigned anonymous inner class names 'MyEnum$0' and 'MyEnum$1' respectively instead of the super class 'MyEnum' when added to the list of enumerations kept in the Enum super class via the Enum constructor. A simple work around is to strip the inner class descriminator off the class name in the Enum constructor, i.e. protected Enum(String name) { super(); if (name == null || name.length() == 0) { throw new IllegalArgumentException("The Enum name must not be empty"); } iName = name; // Retrieve class name. String className = getClass().getName(); // Search for inner class. int index = className.lastIndexOf('$'); if (index > -1) { // Strip off inner class reference. className = className.substring(0, index); } Entry entry = (Entry) cEnumClasses.get(className); if (entry == null) { entry = new Entry(); cEnumClasses.put(className, 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); } -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
