1

2 つの入力マップ間の値の片側交差を返す関数があります。

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 に答える