为什么Collection <E> #toArray()不返回E []?

jrh*_*ath 2 java arrays generics collections

为什么Collection<E>.toArray()(非参数化方法)返回Object[]

这是有意识地做出决定的吗?是否有任何理由为什么该toArray()方法无法返回a E[],如果它想要?

And*_*Mao 6

这是因为在T不知道类型的情况下无法实例化类型数组Class<T>.与此对比toArray(T[] array),具有以下来源(示例来自LinkedList).请注意,传入的数组不仅用作可能的容器,还可以实例化该类型的新数组.如果T不是超类,则此代码抛出异常E; 如果无法将对象添加到数组中.

@SuppressWarnings("unchecked")
public <T> T[] toArray(T[] a) {
    if (a.length < size)
        a = (T[])java.lang.reflect.Array.newInstance(
                            a.getClass().getComponentType(), size);
    int i = 0;
    Object[] result = a;
    for (Node<E> x = first; x != null; x = x.next)
        result[i++] = x.item;

    if (a.length > size)
        a[size] = null;

    return a;
}
Run Code Online (Sandbox Code Playgroud)