SuperScenePack3
一、背景 有些同学提出“ArrayList的public <T> T[] toArray(T[] a) 带参数的方法支持泛型可以返回参数类型的数组,public Object[] toArray() 方法为啥不利用泛型返回List的泛型类型的数组”?这个问题。 那让我们看下源码研究一下吧。另外我将介绍一下通用解决这类问题的方法,方便大家举一反三。 二、研究 无参源码java.util.ArrayList#toArray() public Object[] toArray() { return Arrays.copyOf(elementData, size); } 底层函数java.util.Arrays#copyOf(T[], int) @SuppressWarnings("unchecked") public static <T> T[] copyOf(T[] original, int newLength) { return (T[]) copyOf(original, newLength, original.getClass()); } 的确这里支持泛型。 但是我们看一下ArrayList真正存储对象的变量: transient Object[] elementData; 它的类型为Object数组。 因此从源码来看,返回值必然是Object数组了。 为啥不给转成E[] 这样呢? 一...