以下代码抛出 ArrayStoreException
在toArray()
。鉴于toArray
,编译器不应该发现错误并报告类型冲突吗?需要 V[]
并且注册表映射的值是 Map<String,String>
?
private Map<String,Map<String,String>> registry;
...
registry=new TreeMap<String,Map<String,String>>(String.CASE_INSENSITIVE_ORDER));
...
void removeTargets(String[] clsarr, String hdl) {
if(clsarr==null) { clsarr=registry.values().toArray(new String[0]); }
...
}
对我来说,这看起来像是一个编译器错误。
最佳答案
不是编译器错误。不过可以说是一个库错误。
Collection.toArray()
的类型是 <T> T[] toArray(T[] a)
。请注意T
是 toArray
的类型参数方法,与 Collection
没有关系的类型参数。
如果 Collection.toArray
的签名就会捕获此错误。是<T super E> T[] toArray(T[] a)
但这会使其难以使用,因为这样做是不合法的 new Map<String, String>[0]
-- 您收到“通用数组创建”错误。
关于java - 编译器应该用泛型集合捕获这个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036210/