ArrayList al = new ArrayList();
......//al 数据写入 
String[] strs = (String[]) al.toArray();
这个是错的  为什么?
为什么 在集合里面 又有这种写法是对的呢? 
E[] strs = (E[]) new Object[];

解决方案 »

  1.   

    你 可以这样
    ArrayList<String> al=new ArrayList<String>();
    String []strs=new String[al.size()];
    al.toArray(strs);
    这样就可以转了
      

  2.   

    String[]   strs   =   (String[])   al.toArray(); 
    当然是错的,没有声明数组大小E[]   strs   =   (E[])   new   Object[];
    这个是泛型模板....写法也标准语法不同...
      

  3.   

    我也问过,还不知道原因;
    只知道源码里的toArray返回的是Object类型,按道理是可以转的
    但是不知为什么就是转不了
    但是这样也可以转
    Object objs[]=al.toArray();
    for(Object obj:objs)
            System.out.println((String)obj);
      

  4.   

    谢谢楼上的几位我开始的 理解是  数组就是不能强型转换 因为 数组对象没有继承关系  也就是Object[] 和 String[] 没有父子关系 所以不能强型转换。可是当我看到E[] strs=(E[])new Object[]; 的时候又模糊了。
     
    如果说泛型语法不一样的话,那我声明的泛型类被类型擦除了之后 就有这种语句:String[] strs=(String[])new Object[]; 
      

  5.   

    1. Object[] toArray();
    2. T[] toArray(T[] a);
    你查源码可以知道, 2是泛型的,1是返回的是Object[]。
      

  6.   

    调用al.toArray()返回的是一个Object型的数组。 
    如:al.add("dd");
       al.add(new Object());
      Object[] o=  al.toArray();
    这样是可以的。你将Object[] 强制转String[]当然错误。
       al.add("dd");
      al.toArray(new String[0]);
      这样当然可以,你指定了这个list转为String[]型。