如何通过字符串名称创建类实例

时间:2014-04-20 17:43:40

标签: java

我想通过字符串变量创建新的类实例,将int []作为参数传递给此构造函数,并将此实例保存在数组列表中。

更重要的是,那个班级来自其他一些班级,让我们说巴尔。该数组列表的类型为Bar。所以:

    List<Bar> something = new ArrayList<Bar>();
    String name = "Foo";
    int[] arr = {1, 2, 3, 4, 5};
    try {
        Class myClass = Class.forName(name);
        Class[] types = {Integer.TYPE};
        Constructor constructor = myClass.getConstructor(types);
        Object[] parameters = {arr};
        Object instanceOfMyClass = constructor.newInstance(parameters);
        something.add(instanceOfMyClass);
    } catch(ClassNotFoundException e) {
        // handle it
    } catch(NoSuchMethodException e) {
        // handle it
    } catch(InstantiationException e) {
        // handle it
    } catch(IllegalAccessException e) {
        // handle it
    } catch(InvocationTargetException e) {
        // handle it
    }

这是我想出来的,但遗憾的是它不起作用。我怎样才能在这里传递整数数组(这是什么类型)?如何将此实例添加到此处给出的数组列表中(它会抛出一个错误,我必须将Foo类的实例强制转换为Foo类)?

1 个答案:

答案 0 :(得分:4)

Class[] types = {Integer.TYPE};
Constructor constructor = myClass.getConstructor(types);

这会查找一个带有intInteger的构造函数,而不是int的数组。

如果要查找带有int[]的构造函数,则传递正确的参数:

Class[] types = { int[].class };
Constructor constructor = myClass.getConstructor(types);