ArrayList无法使用(String [])list.toArray()转换为String数组。为什么?

时间:2013-11-21 11:03:44

标签: java string arraylist toarray

为什么以下代码无法执行,尽管它不会从IDE中检测到错误。它会编译好。

 ArrayList<String> a = new ArrayList<String>();
    a.add("one");
    a.add("two");
    a.add("three");
    String [] b = (String[])a.toArray();
    for(int i =0;i<b.length;++i){
        System.out.println(b[i]);
    }

但它会产生以下错误。

  

嵌套异常是java.lang.ClassCastException:[Ljava.lang.Object;   无法转换为[Ljava.lang.String;

有人能说清楚吗?之前已经提出过同样的问题,并提供了一些解决方案。但是对这个问题的明确解释将非常感激。

5 个答案:

答案 0 :(得分:5)

你应该这样做:

String[] b = new String[a.size()];
a.toArray(b);

您收到错误是因为toArray()返回Object[]而且这不能归结为String[]

答案 1 :(得分:3)

您需要提及数组的类型,否则默认情况下,toArray()会返回Object的数组,而这些数组不能简单地投放到String[]。如果指定了类型,则会调用重载的toArray(T[]),并返回作为参数提到的数组类型。

String [] b = a.toArray(new String[]{});

答案 2 :(得分:3)

a.toArray()正在创建Object[]而不是String[],因此类型转换失败。

 String[] b = a.toArray(new String[a.size()]);

请参阅javadocs了解List.toArray

的两个重载

答案 3 :(得分:0)

查看JavaDoctoArray()返回Object[]数组,该数组无法向下转换为String[]

您需要this method - 原因是在运行时删除了泛型,因此JVM不会知道您的ArrayList曾经是包含String'的内容S:

String [] b = a.toArray( new String[] {} );

干杯,

答案 4 :(得分:0)

(现在/将来可能有所帮助。)

从1.5开始你就可以这样做:

for(String output : a) { // Loops through each a (which is a String)
 System.out.println(output); // As it is a String list we can just print it
}

这更具可读性,可能会派上用场。

输出:

one
two
three