无法从Guava MultiMap获取密钥

时间:2012-08-07 13:06:13

标签: java guava

我有以下代码:

@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(捕获#5-extends扩展索引)不适用于参数(索引)

我偶然发现了一个着名的仿制药吗?我不安静,看看问题是什么。

旁注:我正在构建一个扩展SetMultiMap的类,因为我有特定的密钥匹配要求

3 个答案:

答案 0 :(得分: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。)

答案 1 :(得分:2)

get方法的签名是

get(K key) 

您的Multimap声明为

Multimap<? extends Index, ? extends V> multimap

所以你不知道密钥的类型。你知道它是或者扩展Index,但你不知道它的类型。因此传递Index的实例是无效的。

答案 2 :(得分:1)

您是否尝试过使用常规MultimapEquivalence.wrap - 按键?