[
https://issues.apache.org/jira/browse/COLLECTIONS-531?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thomas Neidhart resolved COLLECTIONS-531.
-----------------------------------------
Resolution: Fixed
Fix Version/s: 4.1
> Generic Wildcards specified in CollectionUtils#isEqualCollection(Collection,
> Collection, Equator) may throw ClassCastException in certain cases
> -----------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: COLLECTIONS-531
> URL: https://issues.apache.org/jira/browse/COLLECTIONS-531
> Project: Commons Collections
> Issue Type: Bug
> Components: Collection
> Affects Versions: 4.0
> Reporter: Dipanjan Laha
> Priority: Minor
> Fix For: 4.1
>
> Attachments: IsEqualCollectionTest.java
>
>
> CollectionUtils#isEqualCollection(Collection, Collection, Equator) is defined
> as
> {code}
> public static boolean isEqualCollection(final Collection<?> a, final
> Collection<?> b, final Equator<?> equator) {
> ...
> }
> {code}
> This makes it possible to invoke it with a code like
> {code}
> public static class IntegerEquator implements Equator<Integer> {
> public boolean equate(Integer o1, Integer o2) {
> return o1.intValue() == o2.intValue();
> }
> public int hash(Integer o) {
> return o.intValue();
> }
> }
> @Test
> public void test() {
> List<Long> longList = Arrays.asList(1L, 2L);
> List<Integer> intList = Arrays.asList(1, 2);
> assertTrue(CollectionUtils.isEqualCollection(longList, intList, new
> IntegerEquator()));
> }
> {code}
> which compiles perfectly but throws a ClassCastException as Long cannot be
> cast to an Integer. However, the generics should be defined such that this is
> stopped at compile time itself.
> If we modify the method to something like
> {code}
> public static <E> boolean isEqualCollection(final Collection<? extends E> a,
> final Collection<? extends E> b, final Equator<? super E> equator) {
> ...
> }
> {code}
> the above example would give a compile time error. imho we should modify this
> method with bounded wildcards. I don't think this change would break any
> existing binaries if the method is being used correctly, otherwise it is
> probably throwing ClassCastExceptions anyway.
> Test case attached
--
This message was sent by Atlassian JIRA
(v6.2#6252)