在Java集合框架中,Collection接口声明了以下方法:
返回包含此集合中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果集合适合指定的数组,则返回其中。否则,将使用指定数组的运行时类型和此集合的大小分配新数组。
如果你想实现这个方法,你将如何创建一个 a 类型的数组,只在运行时才知道?
答案 0 :(得分:33)
使用静态方法
java.lang.reflect.Array.newInstance(Class<?> componentType, int length)
可在此处找到有关其使用的教程: http://java.sun.com/docs/books/tutorial/reflect/special/arrayInstance.html
答案 1 :(得分: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;
}
答案 2 :(得分:3)
Array.newInstance(Class componentType, int length)
答案 3 :(得分:-1)
要创建泛型类型的新数组(仅在运行时已知),您必须创建一个Object数组,然后将其强制转换为泛型类型,然后将其用作此类。这是Java(擦除)的泛型实现的限制。
T[] newArray = (T[]) new Object[X]; // where X is the number of elements you want.
然后该函数获取给定(a)的数组并使用它(事先检查它的大小)或创建一个新数组。