Java使用String [] stringArray参数在运行时实例化一个类

时间:2014-05-24 20:48:39

标签: java reflection

我在运行时获取类的具体实现时遇到了麻烦。 我在运行时获得了类className的名称,我想用构造函数初始化它,该构造函数接受一个String数组。我有以下

stringArray = new String[]{"abc", "def"};
Class clazz = Class.forName(className);
Constructor<MyCustomInterface> constructor = null;
MyCustomInterface myCustomObject = null;
constructor = clazz.getDeclaredConstructor(String[].class);  // Gives constructor which takes in String[] I assume
myCustomObject =  constructor.newInstance(stringArray);   // I am providing the same here

在我的自定义界面实现中我有

public class MyClass implements MyCustomInterface{
    public MyClass(String args[]) throws Exception{
        //My custom constructor
    }
}

但即使我传递一个字符串数组,我仍然会得到一个例外wrong number of arguments。我很困惑如何继续。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:6)

Java中的数组类型是协变的。这意味着Object[] objectArray = stringArray;是完全有效的陈述。

当您致电constructor.newInstance时,您的stringArray正在投放到Object[],并且您正尝试使用两个独立的String参数调用构造函数。

您需要明确地将stringArray包装在Object[]中或将其强制转换为Object,然后让JVM自动将其包装在Object[]中:

constructor.newInstance(new Object[] { stringArray });

constructor.newInstance((Object) stringArray);