【发布时间】:2015-11-15 14:33:32
【问题描述】:
我有以下情况:在下面的代码中,方法foo 编译而方法bar 不会。在方法调用entrySet(在代码中表示)编译器说:
Type mismatch: cannot convert
from Set<Map.Entry<capture#1-of ? extends K,capture#2-of ? extends V>>
to Set<Map.Entry<? extends K,? extends V>>
有趣的是,Eclipse 的 quickfix 建议
Change type of 's' to Set<Entry<? extends K, ? extends V>>
这只会更改代码,因为 quickfix 忽略了自己的提议,而是将 s 的类型更改为 Set<?>。
我正在使用 JDK1.8.0_51 和 Eclipse 4.4.0。也许它与通配符或捕获有关?任何帮助或建议将不胜感激。提前致谢!
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class MyClass<K, V> {
public void foo(Set<Entry<? extends K, ? extends V>> set) {
Iterator<Entry<? extends K, ? extends V>> i = set.iterator();
}
public void bar(Map<? extends K, ? extends V> map) {
Set<Entry<? extends K, ? extends V>> s = map.entrySet();
^^^^^^^^^^^^^^
}
}
【问题讨论】:
-
Intellij 建议:
Set<? extends Map.Entry<? extends K, ? extends V>> s = ...并且 oracle jdk8 接受了 -
查看stackoverflow.com/questions/13320105/…的解释。你的例子很相似。
标签: java eclipse generics capture type-mismatch