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
    Affects Versions: Generics
            Reporter: Michael Heuer
            Priority: Minor
         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.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to