2

次のコードがあります。

@Override
public boolean putAll(Multimap<? extends Index, ? extends V> multimap) {
    for (Index index : multimap.keySet()) {
        putAll(index, multimap.get(index));
    }
}

multimap.get(index)コンパイルエラーはどこにありますか:

Multimap 型のメソッド get(capture#5-of ? extends Index) は、引数 (Index) には適用されません。

有名なジェネリックの落とし穴に出くわしましたか? 問題が何であるかを黙って見ません。

補足: 特定のキー マッチング要件があるため、 SetMultiMap を拡張するクラスを構築しています。

4

3 に答える 3

2

を入れたとしますMultimap<FooIndex, Integer>。次に、次のようになります。

Multimap<FooIndex, Integer> map = ...;
Index plainIndex = ...;
Integer value = map.get(plainIndex);

Multimap.getを取るので、それは型の失敗Keyです。このメソッドをジェネリックにする必要があると思います:

@Override
public <Key extends Index> boolean putAll(Multimap<Key, ? extends V> multimap) {
    for (Key index : multimap.keySet()) {
        putAll(index, multimap.get(index));
    }
}

(私はそれをテストしていませんが、それはより理にかなっています、IMO。)

于 2012-08-07T13:11:07.790 に答える
2

get メソッドのシグネチャは

get(K key) 

マルチマップは次のように宣言されています

Multimap<? extends Index, ? extends V> multimap

したがって、キーの種類はわかりません。であること、または extendsIndexであることは知っていますが、その型はわかりません。したがって、インスタンスを渡すことIndexは無効です。

于 2012-08-07T13:13:35.660 に答える
1

通常のキーを使用してキーを使用してみましたMultimapEquivalence.wrap

于 2012-08-07T20:19:42.657 に答える