跨地图的通用键控:Map <k,v> Map <t,k>和Map <t,v> </t,v> </t,k> </k,v>

时间:2009-09-01 22:45:19

标签: java generics collections maps

我有一个函数,它返回两个输入映射之间的单侧交叉值:

Map<Key, Value> mergeMaps(Map aKeys<CompositeKey, Key>, 
         Map <CompositeKey, Value> aValues) {

    Map<Key, Value> myResult = Maps.newHashMap();
    for (CompositeKey myKey : aKeys.keySet()) {
        if (aValues.containsKey(myKey)) {
            myResult.put( aKeys.get(myKey), aValues.get(myKey));
        }
    }
    return myResult;
}

这是传递映射组合,即

T->K, K->V ===> T->V

但转而改变

T->(K,V) ===> K->V

Java中是否有办法使此函数具有通用性,使其签名如下?

Map<K, V> mergeMaps(Map aKeys<T, K>, Map <T, V> aValues)

2 个答案:

答案 0 :(得分:5)

我认为这个签名应该符合您的要求:

<T, K, V> Map<K, V> mergeMaps(Map<T, K> aKeys, Map<T, V> aValues)

答案 1 :(得分:4)

对于完全通用的表格,您可以

public <T, K, V> Map<K, V> mergeMaps(Map<T, K> aKeys, Map<T, V> aValues)

如果在课堂上设置K和V,你可以将它们拿出来。

如果您想要指定T和K之间的关系,V可能需要一些东西 像

public <K, V, T extends CompositeKey<K, V>> ...

可能有一些? extends? super,但这取决于用例。