2014-11-04 48 views
1

我尝试以下的代码:的java getConstructor(字符串[]类)

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

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

(返回语句返回一个IllegalArgumentException)

而且

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

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

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

(return语句返回一个IllegalArgumentException)

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

谢谢。

+0

的可能重复的[问题的使用反射和数组参数构建类(http://stackoverflow.com/questions/5760569/problem-with-constructing-class-using-reflection-and-array-arguments ) – ToYonos 2014-11-04 12:13:02

回答

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

+0

很好,谢谢 – Max 2014-11-04 12:29:19

+0

非常感谢。 – Max 2014-11-04 14:18:55

+0

你是verrrrry欢迎:) – ToYonos 2014-11-04 14:20:05

0

调用的newInstance直接与一个新的String []混淆,因为它是不确定新的String []是否是一个arg,或者是代表可变参数的替代方法。通过将它分配给下面的对象“abc”,它明确地告诉编译器abc(它代表字符串数组)是一个arg,arg0是准确的,而不是代表多个参数的可变参数。

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); 
    } 
}