Java - 转换集合

tur*_*oup 1 java casting

有人能告诉我以下代码有什么问题吗?

    Set<String> cmds = *a method call that returns a Set<String>*
    String[] cmdarr = (String[]) cmds.toArray();
    int i;
    for(i=0; i<cmdarr.length;i++){
        System.out.println(cmdarr[i]);
Run Code Online (Sandbox Code Playgroud)

它给出了以下错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at a.jim.Test.main(Test.java:79)
Run Code Online (Sandbox Code Playgroud)

提前致谢!

eri*_*son 5

Set本身没有关于其运行时可用元素的任何类型信息; <String>在编译期间删除类型参数.因此,该toArray()方法始终创建一个类型数组Object[].

您可以将数组传递给方法,并将集合的内容复制到其中:

String[] cmdarr = cmd.toArray(new String[cmd.size()]);
Run Code Online (Sandbox Code Playgroud)

您传入的数组太小,将使用反射创建具有相同组件类型的新数组,但这不如传递正确大小之一那样有效.