Hi Jörg,
thanks for your quick response and your approach to solve this issue. But
anyway I think it should be possible to add these Enums to a Set without
throwing a ClassCastException regardless of which class, anonymous inner class
or whatever else the Enum is.
Samuel
-Original Message-
From: Jörg Schaible [mailto:[EMAIL PROTECTED]
Sent: Thursday, September 13, 2007 4:06 PM
To: Jakarta Commons Users List
Subject: RE: [lang] ClassCastException in Enum.compareTo with anonymous inner
classes
Hi Samuel,
Samuel Fleischle wrote on Thursday, September 13, 2007 3:51 PM:
Hi,
I updated from Commons Lang 2.1 to Commons Lang 2.3 and got
some issues with the changed compareTo() method of Enum with
anonymouse inner classes:
Here is my simplified Enum:
public class ItemStatus extends Enum
{
// --
Static Fields
public static final ItemStatus CANCEL = new
ItemStatus(CANCEL, Cancel);
public static final ItemStatus SHIPPED = new
ItemStatus(SHIPPED, Shipped) {
public String getDisplayName() {
// do something special for this status
}
};
public static final ItemStatus MOVED = new
ItemStatus(MOVED, Moved) {
public String getDisplayName() {
// do something special for this status
}
};
[snip]
}
[snip]
com.myapp.common.model.order.ItemStatus
com.myapp.common.model.order.ItemStatus$1
com.myapp.common.model.order.ItemStatus$2
The compareTo-Method now tries to compare ItemStatus$1 with
ItemStatus$2 and says to me, that my ItemStatus-Enums are
different classes.
Well, obviously those *are* different classes.
I saw in JIRA there are some other issues in
ValuedEnum.compareTo(). Is there a bug in the
Enum.compareTo() implementation which got changed in Lang 2.2?
IIRC, this was more about using different class loaders loading the EnumValue
class.
Thanks in advance for any help or comment on this issue.
Why don't you factor out a (private) interface with this method? Write an
addition ctor that takes such an implementation and use otherwise a default
one. With this approach the enum class is always the same and the anonymous
class is of a different type. Make the an additional field in the enum class
keeping that implementation and declare it as transient for seamless
serialization.
- Jörg
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]