[ 
http://issues.apache.org/jira/browse/LANG-259?page=comments#action_12412798 ] 

Ralf Hauser commented on LANG-259:
----------------------------------

Before just comparing the 
   iValue - ((ValuedEnum) other).iValue
it should be checked that the classes are the same!

                Enum otherEnum = (Enum) other;
                String thisClassName = this.getClass().getName();
                String otherClassName = otherEnum.getClass().getName();
                if (!otherClassName.equals(thisClassName)) {
                        log.warn("enum classes are not equal \"" + 
thisClassName + "\" <> \"" + otherClassName + "\"");
                        throw new ClassCastException("enum classes are not 
equal \"" + thisClassName + "\" <> \"" + otherClassName
                                        + "\"");
                }

Furthermore, it might be recommendable to make some methods of 
org.apache.commons.lang.enums.Enum at least "protected" such that ValuedEnum 
can use them too:

If available, I would love to also have the more sophisticated checks, 
Enum.compareTo(Object other) does also used in ValuedEnum.compareTo(Object 
other):

if (res == 0) {
                        String otherName = otherEnum.getName();
                        if (other.getClass() != this.getClass()) {
                                if 
(other.getClass().getName().equals(this.getClass().getName())) {
                                        return 
iName.compareTo(getNameInOtherClassLoader(other));
                                }
                        }
                        res = iName.compareTo(otherName);
                        if (res != 0) {
                                log.warn("enum names are not equal \"" + 
otherName + "\" <> \"" + this.getName() + "\"");
                                throw new ClassCastException("enum names are 
not equal \"" + otherName + "\" <> \"" + this.getName()
                                                + "\"");
                       }
}

> ValuedEnum.compareTo(Object other) not typesafe - it easily could be...
> -----------------------------------------------------------------------
>
>          Key: LANG-259
>          URL: http://issues.apache.org/jira/browse/LANG-259
>      Project: Commons Lang
>         Type: Bug

>     Versions: 2.1
>  Environment: all
>     Reporter: Ralf Hauser

>
> int org.apache.commons.lang.enums.ValuedEnum.compareTo(Object other)
>  is not typesafe - if the int-values are the same, it will return "0" even 
> for two totally different sub-classes of ValuedEnum

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to