【发布时间】:2010-12-16 10:15:37
【问题描述】:
在下面的sn-p中:
package test;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
public class WildcardsTest<K, V> {
private Iterator<Map.Entry<K, ? extends Collection<V>>> iterator;
public WildcardsTest(Map<K, ? extends Collection<V>> map) {
iterator = map.entrySet().iterator();
/* Type mismatch: cannot convert from
Iterator<Map.Entry<K,capture#1-of ? extends Collection<V>>> to
Iterator<Map.Entry<K,? extends Collection<V>>> */
}
}
分配不正确,尽管类型似乎完全匹配。
我通过将 Collection 的类型指定为另一个通用参数来设计一个肮脏的解决方法,如下所示:
public class WildcardsTest<K, V, C extends Collection<V>> {
private Iterator<Map.Entry<K, C>> iterator;
public WildcardsTest(Map<K, C> map) {
iterator = map.entrySet().iterator();
}
}
但是 C 参数实际上是一个“无关紧要”的类型,只会使 API 复杂化,有没有办法在保持类型安全的同时摆脱它?
谢谢。
【问题讨论】:
标签: java generics wildcard capture