[ https://issues.apache.org/jira/browse/COLLECTIONS-244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13605250#comment-13605250 ]
Michael Heuer commented on COLLECTIONS-244: ------------------------------------------- Just to update this issue; the code attached above lives at http://www.dishevelled.org/multi-map/ with a package private copied and extended with generics version of AbstractHashedMap. When version 4.x of commons-collections is released, I plan to remove this and use the public AbstractHashedMap instead. > Proposal to support generic multi-key maps with keys of different types > ----------------------------------------------------------------------- > > Key: COLLECTIONS-244 > URL: https://issues.apache.org/jira/browse/COLLECTIONS-244 > Project: Commons Collections > Issue Type: Improvement > Components: Map > Reporter: Michael Heuer > Priority: Minor > Fix For: 4.x > > Attachments: multi-map.tar.gz > > > MultiKeyMap as designed can only accept keys of the same type, if made to > support generics, i.e. > MultiKeyMap<MultiKey<String>,Integer> map = ...; > map.put("foo", "bar", 10); > // not possible > //MultiKeyMap<MultiKey<String,Integer>,Double> map = ...; > Attached is a proposal that may support multi-key maps with keys of different > types. I do not believe varying numbers of typed keys can be supported in a > single interface, thus this proposal includes > BinaryKey<K1,K2> > BinaryKeyMap<K1,K2,V> extends Map<BinaryKey<K1,K2>,V> > TertiaryKey<K1,K2,K3> > TertiaryKeyMap<K1,K2,K3,V> extends Map<TertiaryKey<K1,K2,K3>,V> > QuaternaryKey<K1,K2,K3,K4> > QuaternaryKeyMap<K1,K2,K3,K4,V> extends Map<QuaternaryKey<K1,K2,K3,K4>,V> > To prevent unnecessary object creation, I also propose to support > MapIterator-style iterators: > BinaryKeyMapIterator<K1,K2,V> extends Iterator<V> > TertiaryKeyMapIterator<K1,K2,K3,V> extends Iterator<V> > QuaternaryKeyMapIterator<K1,K2,K3,K4,V> extends Iterator<V> > Current multi-map MapIterator support is implemented as Iterator<K1> but I > find that Iterator<V> makes more sense here. It is not possible to support > MapIterator<K,V> without object creation, e.g. > MapIterator<BinaryKey<K1,K2>,V> must create BinaryKey objects for each call > to next(). -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira