10

我们都知道我们可以在字符串格式的类名的帮助下创建一个对象。就像我有一个班级名称“测试”。使用

Class.forName("Test").newInstance()

我们可以创建该类的对象。

我的问题是有没有办法使用类名创建对象的数组或数组列表?或者假设我们有一个类的对象,并且可以使用该对象创建该对象的数组或数组列表。

4

2 回答 2

17

要创建一个数组,您可以使用java.lang.reflect.Array及其newInstance方法:

Object array = Array.newInstance(componentType, length);

请注意,返回类型只是Object因为没有办法表示它返回正确类型的数组,除了将其设为泛型方法......通常你不希望它是。(在你的情况下你当然不会。)即使那样,如果你通过了它也不会应付int.class

示例代码:

import java.lang.reflect.*;

public class Test {
    public static void main(String[] args) throws Exception {
        Object array = Array.newInstance(String.class, 10);

        // This would fail if it weren't really a string array
        String[] afterCasting = (String[]) array;
        System.out.println(afterCasting.length);
    }
}

因为ArrayList,没有真正的概念——类型擦除意味着 anArrayList并不真正知道其组件类型,因此您可以创建任何 ArrayList. 例如:

Object objectList = new ArrayList<Object>();
Object stringList = new ArrayList<String>();

创建后,这两个对象的类型无法区分。

于 2013-06-14T09:23:42.687 回答
6

您可以使用数组

Object xyz = Array.newInstance(Class.forName(className), 10);

它有一个方法newInstance(Class, int)

创建具有指定组件类型和长度的新数组。调用此方法相当于创建一个数组,如下所示:

 int[] x = {length};
 Array.newInstance(componentType, x);
于 2013-06-14T09:23:55.610 回答