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

标签 java generics

以下代码抛出 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/

相关文章:

java - JSON加spring mvc 3.2报错415(Unsupported Media Type)

线程中的 Java 异常 "main"java.lang.ArrayIndexOutOfBoundsException

delphi - 如何为TList <T>编写通用FreeAll

java - 在 Java 中扩展泛型类型

java - Var-Arg 方法同时将泛型类型推断为 Object 和 Primitive[]

java - 在 Spring 中向 Advice 发送外部参数

java - 根据请求体中的数据转发http请求

c# - Visual Studio Express C# 或 Java 和 Netbeans,还是其他东西......?

java - 如何让重载方法识别泛型类型的特定子类?

C#泛型和继承问题