关于JAVA中的List接口

有如下说明代码
class A{}
main()
{
List all=ArrayList();
all.add(new A());
all.add(new A());
A[] a1=new A[2];
a1=(A[])all.toArray();
A[] a2=all.toArray(new A[]{});
}
以上代码, a1=(A[])all.toArray();总是报ClassCastException错误,
而toArray()方法返回的是Object[],我已经强转了,
A[] a2=all.toArray(new A[]{});却能顺利通过,
请问有人知道为什么吗

java不支持对数组进行强转。
A[] a2 = (A[]) all.toArray(new A[] {});之所以可以是因为,toArray构建的是A【】,虽然返回的是object[].

你那个a1就别先定数组长度了

 all.toArray()返回的object[]数组,object是A的父类,父类不能强转成子类
A[] a2=all.toArray(new A[]{});中toArray传入了类型是A,指定了返回数组的泛型T,所以可以。

public Object[] toArray()
public <T> T[] toArray(T[] a) {
List all = new ArrayList(); // 这里如果写成List<FST> = new ArrayList<FST>(); 下面toArray的前面就不用强转了。
    all.add(new FST());
    all.add(new FST());
    FST[] a1 = new FST[2];
    a1 = (FST[]) all.toArray(a1);  //  toArray(a1)一定要带参数,即创建长度合适的数组
    FST[] a2 = (FST[])all.toArray(new FST[all.size()]);

Java不支持数组的逆变,你不能对数组强制类型转换,只能再开一个新的数组,然后每个元素转换后放进去。

建议去看一下toArray的API