人们提出了类似的问题,但我不确定我是否完全理解这些答案,或者它们是否适用于我的情况。
如何创建在方法参数中定义的类型的数组?
public void newArray(Object type){
type[] theArray = new type[5];
}
显然,这不起作用,但它是我需要的功能。谢谢!
答案 0 :(得分:5)
您可以使用Array.newInstance(Class, int)
但是您需要传递Class
(而不是Object
本身),并使用通用类型。像,
public <T> void newArray(Class<T> type){
T[] theArray = (T[]) Array.newInstance(type, 5);
}
答案 1 :(得分:0)
1)您可以创建一个将class和list作为参数并返回数组的函数:
@SuppressWarnings("unchecked")
public static <T> T[] newArray(Class<T> clazz, List<T> list){
T[] array = (T[]) Array.newInstance(clazz, list.size());
list.toArray(array); // fills array with values from list
return array;
}
2)您可以创建一个为您返回数组的函数:
@SuppressWarnings("unchecked")
public static <T> T[] newArray(Class<T> clazz, int size){
return (T[]) Array.newInstance(clazz, size);
}
此函数返回正确类型的数组,以便您可以在任何需要的地方使用它并用对象填充它(它包含空值)。
int size = 5;
MyType[] myArray = newArray(MyType.class, size);
for (int i = 0; i < size; i++) {
myArray[i] = new MyType();
}
3)您可以创建一个列表,而不是在方法中创建一个数组:
List<MyType> list = new ArrayList<MyType>();
MyType[] array = list.toArray(new MyType[list.size()]);