2017-06-29 65 views
-2

创建未知类型的数组人们已经问过类似的问题,但我不确定我是否理解了答案,或者它们是否适用于我的情况。通过参数

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

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

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

+3

之前,我们试图回答,你确定你的问题不是[XY问题(HTTP ://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)变相?你不妨考虑告诉我们你正试图解决的整体问题,而不是你目前如何解决它。 –

+0

您可能需要[泛型类型](https://www.tutorialspoint.com/java/java_generics.htm) –

+0

您究竟在问什么? Java不允许你在参数中定义类型。你可以计算出参数的确切类型,但是这是个问题吗?你可以创建一个Object类型的数组作为Object [] theArray = new Object [5];'这可以满足你所有的需求。 – Serge

回答

5

您可以使用Array.newInstance(Class, int),但您需要通过Class(而不是Object本身),并使用通用类型。像,

public <T> void newArray(Class<T> type){ 
    T[] theArray = (T[]) Array.newInstance(type, 5); 
} 
+0

这对于原语不起作用。 – shmosel

+1

@shmosel真的,但OP的帖子中的参数类型是“Object”。 –

+0

似乎有点延伸,从目前的组件类型扩展'对象',但也许。 – shmosel

0

1)您可以创建,将采取类列表作为参数,并返回一个数组的函数:

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