java getConstructor(String [] .class)

时间:2014-11-04 11:50:28

标签: java reflection constructor instantiation

我尝试了以下代码:

constructor = oneClass.getConstructor(new Class[]{String[].class});

return constructor.newInstance(new String[]{"String01","String02"})

(return语句返回IllegalArgumentException)

Class stringArray = Class.forName("[Ljava.lang.String;");

constructor = oneClass.getConstructor(new Class[]{stringArray})

return constructor.newInstance(new String[]{"String01","String02"})

(return语句返回IllegalArgumentException)

如何说我想用String []作为参数来实例化一个构造函数。

谢谢。

2 个答案:

答案 0 :(得分:0)

这个怎么样:

constructor = oneClass.getConstructor(String[].class);
return constructor.newInstance(new Object[]{new String[]{"String01","String02"}})

假设您的构造函数是这样的:

public class OneClass
{
    public OneClass(String[] args)
    {
        // ...
    }
}

来源:Problem with constructing class using reflection and array arguments

答案 1 :(得分:0)

直接使用新的String []调用newInstance会使其混淆,因为它不确定新的String []是否是一个arg,或者是表示varargs的替代方法。通过将它分配给下面的Object“abc”,它肯定告诉编译器abc(表示String数组)是一个arg,arg0是准确的,而不是表示多个参数的varargs。

import java.lang.reflect.Constructor;

public class Test {
    public Test(String[] args) {
        System.out.println(args);
    }

    public static void main(String[] args) throws Exception {
        Constructor<Test> constructor = Test.class.getConstructor(String[].class);
        new Test(new String[]{});
        Object abc = new String[]{};
        constructor.newInstance(abc);
    }
}