我在运行时获取类的具体实现时遇到了麻烦。
我在运行时获得了类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
。我很困惑如何继续。任何帮助表示赞赏。
答案 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);