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>>> */
}
}
的分配不正确,虽然类型似乎完全匹配。
我通过指定集合的类型,另一个泛型参数,这样的设计了一个肮脏的解决方法:
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还有什么方法可以摆脱它?
谢谢。
精彩!再一次,解决方案是另一个间接xD级别 – fortran 2010-12-16 10:32:21