有人能告诉我以下代码有什么问题吗?
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)
提前致谢!
它Set本身没有关于其运行时可用元素的任何类型信息; <String>在编译期间删除类型参数.因此,该toArray()方法始终创建一个类型数组Object[].
您可以将数组传递给方法,并将集合的内容复制到其中:
String[] cmdarr = cmd.toArray(new String[cmd.size()]);
Run Code Online (Sandbox Code Playgroud)
您传入的数组太小,将使用反射创建具有相同组件类型的新数组,但这不如传递正确大小之一那样有效.