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()就不会有错误啦
遇到的错误java.lang.ClassCastException,布布扣,bubuko.com
时间: 2024-10-19 14:42:41