1

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

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)
4

2 回答 2

5

我认为这个签名应该做你想要的:

<T, K, V> Map<K, V> mergeMaps(Map<T, K> aKeys, Map<T, V> aValues)
于 2009-09-01T22:51:43.967 回答
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在那里,但这有点取决于用例。

于 2009-09-01T23:00:14.903 回答