public class Test {
public static void main(String[] args) {
ArrayList<String> strList = new ArrayList<String>();
strList.add(new String("hello"));
strList.add(new String("world")); String[] strArray = (String[]) strList.toArray(); //失败
// String[] strArray = new String[strList.size()];
// strList.toArray(strArray); for(String s:strArray) {
System.out.println(s);
}
return;
}
}
为什么那行会失败?两个toArray()有什么不同?我换成如下代码,就好了public class Test {
public static void main(String[] args) {
ArrayList<String> strList = new ArrayList<String>();
strList.add("hello");
strList.add("world");
        String[] strArray = new String[strList.size()];
        Object[] os =   strList.toArray();
        for(int i=0;i<os.length;i++){
            strArray[i] =os[i].toString();
        }
for(String s:strArray) {
System.out.println(s);
}
return;
}
}
难道是强制转换不能针对数组,只能一个一个来?

解决方案 »

  1.   

    list.toArray() 反回的是一个Ojbect[] 数组。 这是个编译确定的Object[] 数组  是不能直接转成String[]  因为他里面可能有某一个元素是Integer,又或者是Double 这样转,会报错。。你也许会说: 我的list用泛型控制了啊,他就是一个保存String类型的list啊。那么楼主,你回去看下泛型那一张,有讲道:泛型在编译期间,提供给编译器进行类型检查,但是在jvm执行时,会被擦除
      

  2.   

    toArray()返回的是Object[]数组
    应该是用 toArray(T[])方法,这样返回T类型的数组

    String[] strArray = strList.toArray(new String[0]);
        
      

  3.   

    类型不对,返回的不是String[]类型
      

  4.   

    使用toArray()方法实现容器到数组的转换有三种方式:
    方法一
       String[] strArray = new String[strList.size()];
       strList.toArray(strArray);
    方法二
        String[] strArray = (String[]) strList.toArray(new String[0]);
    方法三
        String[] str = new String[strList.size()];
       String[] strArray = (String[]) strList.toArray(str);
      

  5.   

    不能一次性强制转换的   里面toArray()返回的是Object
      

  6.   

    说的没错就类型转换的问题,toArray()返回的是Object[]
      

  7.   


    最好能改成:String[] strArray = strList.toArray(new String[strList.size()]);