[英]Java Instantiate a class at run time with String[] stringArray parameters
我在获取运行时类的具体实现时遇到了麻烦。 我得到的类名className
在运行时,我想这需要一个字符串数组构造函数初始化。 我有以下
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
,即使我传递的是字符串数组。 我对如何进行感到困惑。 任何帮助表示赞赏。
Java中的数组类型是协变的。 这意味着Object[] objectArray = stringArray;
是一个完全有效的声明。
当你调用constructor.newInstance
,你的stringArray
被强制转换为Object[]
和你想有两个,分别调用构造函数String
参数。
您要么需要将stringArray
显式地包装在Object[]
要么将其stringArray
为Object
然后让JVM自动为您包装在Object[]
中:
constructor.newInstance(new Object[] { stringArray });
要么
constructor.newInstance((Object) stringArray);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.