为什么<T> forArray隐藏了Collection <E>的<E>?

Ami*_*nde 5 java generics collections

toArray方法隐藏<E>传递给Collection<E>接口.以下是方法签名.

<T> T[] toArray(T[] a);
Run Code Online (Sandbox Code Playgroud)

因为以下是可能的.并将结果转化为ArrayStoreException

ArrayList<String> string = new ArrayList<String>();
string.add("1");
string.add("2");
Integer intArray[] = new Integer[2];
intArray = string.toArray(intArray);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会做出这样的决定?为什么在设计API时允许这样的情况?无论如何这个代码导致了RuntimeException

Lou*_*man 3

toArray方法早于泛型的引入。的原始签名是toArray任意的Object[]

这是使用泛型接受与泛型之前允许的相同输入的唯一方法。但是,采用任意值的优点T[]是它可以返回与其传递的相同的数组类型。