日期:2014-05-20  浏览次数:20687 次

ArrayList的toArray()问题
我在ArrayList中存放了一些字符串:
    List   arr   =   new   ArrayList();
    arr.add( "str1 ");
    arr.add( "str2 ");
    arr.add( "str3 ");
                              ...
然后我想把它转成字符串数组,我这样做的:
    String[]   str   =   (String[])arr.toArray();
这一行抛出了一个类型转换的运行时异常:ClassCastException
请问,为什莫会这样?

------解决方案--------------------
从Object[]到String[]的转换是不行的。
List list = new ArrayList();
list.add( "aaa ");
list.add( "bbb ");
list.add( "ccc ");
Object[] objs = list.toArray();
String[] str = new String[objs.length];
System.arraycopy(objs, 0, str, 0, objs.length);
------解决方案--------------------
在java中,当数组创建后,数组的类型就被固定了,ArrayList.toArray()返回值总是被作为一个Object[]来使用,尽管String[]是Object[]的一个扩展,所以不能简单的通过
(String[])ArrayList.toArray()来将Object[]数组转换成String[].

所以你要这样转换:
ArrayList arr = new ArrayList();
arr.add( "str1 ");
arr.add( "str2 ");
arr.add( "str3 ");

String[] str = (String[])arr.toArray(new String[arr.size()]);