gpt4 book ai didi

java - 编译器应该用泛型集合发现这个错误吗?

转载 作者:行者123 更新时间:2023-11-30 06:35:29 24 4
gpt4 key购买 nike

以下代码抛出 ArrayStoreExceptiontoArray() .鉴于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) .注意 TtoArray 的类型参数方法,与Collection无关的类型参数。

如果 Collection.toArray 的签名,这个错误就会被捕获是<T super E> T[] toArray(T[] a)但这会使它很难使用,因为这样做是不合法的 new Map<String, String>[0] -- 您收到“通用数组创建”错误。

关于java - 编译器应该用泛型集合发现这个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com