如何在运行时给定数组类型实例化Java数组?

Sam*_*Sam 19 java arrays collections

在Java集合框架中,Collection接口声明以下方法:

<T> T[] toArray(T[] a)

返回包含此collection中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型.如果集合适合指定的数组,则返回其中.否则,将使用指定数组的运行时类型和此集合的大小分配新数组.

如果你想实现这个方法,你将如何创建一个只在运行时才知道的a类型的数组?

use*_*116 33

使用静态方法

java.lang.reflect.Array.newInstance(Class<?> componentType, int length)
Run Code Online (Sandbox Code Playgroud)

有关其使用的教程可以在这里找到:http: //java.sun.com/docs/books/tutorial/reflect/special/arrayInstance.html


SCd*_*CdF 20

通过查看ArrayList如何做到:

public <T> T[] toArray(T[] a) {
    if (a.length < size)
        a = (T[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size);
    System.arraycopy(elementData, 0, a, 0, size);
    if (a.length > size)
        a[size] = null;
    return a;
}
Run Code Online (Sandbox Code Playgroud)