首页 > 代码库 > 遇到的错误java.lang.ClassCastException

遇到的错误java.lang.ClassCastException

package tpackage;

public class ArrayList<E> {

	private Object list[];
	private int sum=0;
	
	public ArrayList(){
		this(16);
	}
	public ArrayList(int capacity)
	{
		list = new Object[capacity];
	}
	
	public E[] toArray()     //将Object数组转型为 E[] 
	{
		return (E[]) list;
	}
	public void add(String string) {
		list[sum++]="string";
		
	}
		
}

package tpackage;

public class test1 {
	
	public static void main(String[] args) {
  	
		ArrayList<String> list = new ArrayList<>();
		
		list.add("One");
		list.add("Two");
		list.add("three");

		String[] strs=list.toArray();
		
	}

}
感觉可以的样子,创建Object数组 在转型为String[]

运行错误提示为

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

意思是转型错误 Object不能转型为Sting ; 因为创建的的确是Object 数组:

可以这样解决:

public E[] toArray()
	{
		E[] elements=null;
		if(sum>0)
		{
			elements=(E[])Array.newInstance(list[0].getClass(), sum);
			for (int  i=0;i<sum; i++) {
				elements[i]=(E)list[i];
			}
		}
		return elements;
	}

从第一的值取得对象的实际的Class 实例建立数组, 如果E 是Stirng  建立的数组也是Stirng[];

调用toArray()就不会有错误啦