ArrayList.toArray() 遇到java.lang.ClassCastException错误

ClassA[]   a   =   null;   
 a   =   (ClassA[])list.toArray();   


 出现java.lang.ClassCastException错误。

原因:

这种转换方式是不被支持的。
强制转换的直接作用对象是Object类型的,通常只能支持普通的类型对象转化,
String[]包括两层转换,数组、String。多重转换由于sun并没有提出这种转换的转换类型先后顺序,
这个会引起分歧,导致转换失败。例如:你是想先把arraylist.toArray()这个对象转化为String,再把它转化为String[]就会出现不同的转换结果,这就是分歧的产生。

例子:

public static void main(String[] args) {
	Object[] o = new Object[3];
	o[0] = new Long(1);
	o[1] = new Long(2);
	o[2] = new Long(3);
	Long[] a = new Long[3];
	a = (Long[])o;
}


同样会报ClassCastException异常

 

正确使用方法:

 

        1)  Long[] l = new Long[<total size>];
              list.toArray(l);
 
        2)  Long[] l = (Long []) list.toArray(new Long[0]);

        3)  Long [] a = new Long[<total size>];
              Long [] l = (Long []) list.toArray(a);

 

你可能感兴趣的:(String,object,null,sun)