通过参数创建未知类型的数组

时间:2017-06-29 22:29:41

标签: java arrays

人们提出了类似的问题,但我不确定我是否完全理解这些答案,或者它们是否适用于我的情况。

如何创建在方法参数中定义的类型的数组?

public void newArray(Object type){
    type[] theArray = new type[5];
}

显然,这不起作用,但它是我需要的功能。谢谢!

2 个答案:

答案 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()]);