Michael Pradel created COLLECTIONS-424:
------------------------------------------
Summary: Surprising exception by CompositeSet in a situation where
CompositeCollection works fine
Key: COLLECTIONS-424
URL: https://issues.apache.org/jira/browse/COLLECTIONS-424
Project: Commons Collections
Issue Type: Bug
Components: Set
Affects Versions: 3.2.1
Environment: All environments
Reporter: Michael Pradel
We have a method that uses a CompositeCollection. Here's a simplified version
of it:
void m(CompositeCollection coll) {
coll.addComposited(new TreeBag());
}
It works fine when the argument is a CompositeCollection, but it throws an
exception when the argument is a CompositeSet. E.g.:
m(new CompositeCollection()); // OK
m(new CompositeSet()); // IllegalArgumentException
Although the exception is documented in CompositeSet, this behavior is very
surprising. Is there a way to have m() accept CompositeCollections without
running into this exception? The only solution that comes to my mind is to
dynamically check the type of 'coll' in m(), but this is a rather nasty
work-around.
A better solution may be to make the genericity of CompositeCollection explicit
by adding a type parameter:
class CompositeCollection<T extends Collection> {
void addComposited(T c) { /* .. */ }
}
class CompositeSet extends CompositeCollection<Set> {
@Override void addComposited(Set c) { /* .. */ }
}
This way, users of CompositeCollection must choose the kind of collections that
can be composed and will not encounter surprises, such as the above.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira