[
https://issues.apache.org/jira/browse/COLLECTIONS-527?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14000368#comment-14000368
]
Ignat Alexeyenko commented on COLLECTIONS-527:
----------------------------------------------
In Maven world one probably gets something like:
{code}
Project
`-- dependency A
`-- commons-collection-3.2.1
`--dependency B
`--commons-collections-3.3.0
{code}
Where Maven resolves version of 3.3.0 and if *dependency A* uses some of
commons-collection's remove(Object, Object) values they must receive runtime
exceptions. This situation can be solved either by:
* using patched version of dependency A, that is compatible with
commons-collections 3.3.0
* loading dependencies in different class loaders
Consider the other case, there's only commons-collection 3.2.1 in project:
{code}
Project
`-- dependency A
`-- commons-collection-3.2.1
`--dependency B
`--commons-collections-3.2.1
{code}
The same *dependency A* still uses some of commons-collection's remove(Object,
Object) and we run Java 8. Again, they must receive same runtime exceptions -
even without single change in commons-collection 3.2.1.
*Adopting Java 8*
So projects are already doomed if they need to run Java 8 with
commons-collections 3.2.1. Transition to commons-collections4 might not be an
option, as there are too much code changes required in projects. Even more code
changes in other libraries (like *dependency A*)!
*More options*
Finally, developers aren't forced to upgrade to commons-collections 3.3.
Developers may be happy with older Java or they're fortunate to avoid
exceptions in remove(Object, Object) invocations on MultiMaps.
In any case, having a new compatibility release leaves more options for other
projects and developers to react, then having no compatibility release at all.
As mentioned earlier, this must have a coherent impact on other libraries (like
*dependency A*) - much better then just a custom project fork.
Thanks [~joehni] for your time.
> Please create a version commons-collections 3.x for jdk 8 compatibility
> -----------------------------------------------------------------------
>
> Key: COLLECTIONS-527
> URL: https://issues.apache.org/jira/browse/COLLECTIONS-527
> Project: Commons Collections
> Issue Type: Bug
> Reporter: Ignat Alexeyenko
> Priority: Blocker
> Labels: java8, jdk8
> Attachments: COLLECTIONS_3_2_BRANCH_COLLECTIONS_527.patch
>
>
> Could you make a 3.x or 3.2.x release compatible with JDK8 ?
> {code}
> org.apache.commons.collections.MultiMap {
> public Object remove(Object key, Object item);
> }
> {code}
> is not compatible with JDK's 8 Map
> {code}
> java.util.Map {
> boolean remove(Object key, Object value);
> }
> {code}
> This causes bugs in projects, who run jdk8 and even compilation failures -
> for these, who implement common's MultiMap.
> *Compilation Error*
> If anyone implement MultiMap in their code, compilation fails with the error:
> {code}
> MyMultiHashMap.java:[11,7] error: remove(Object,Object) in MultiHashMap
> cannot implement remove(Object,Object) in Map
> [ERROR] return type Object is not compatible with boolean
> {code}
> *Reasoning*
> JDK 8 is here and being adopted. collection-commons are not yet compatible
> with Java 8. For many big project switch to commons-collections 4.x is not an
> option - some transitional release version needs to be required.
> Alternative would be for companies to fork commons-collections and create
> their internal artifact. Why do it if the official compatibility version can
> be created?
> Thanks!
--
This message was sent by Atlassian JIRA
(v6.2#6252)