我有以下代码:
@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的类,因为我有特定的密钥匹配要求
答案 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)
您是否尝试过使用常规Multimap
和Equivalence.wrap
- 按键?