我正在尝试在RCP插件项目中使用java.lang.reflect
方法来创建对象的新实例。如果我用这个:
constructorList[0].newInstance();
它在运行时运行正常(通过RCP应用程序运行),但代码行在JUnit中失败:java.lang.IllegalArgumentException: wrong number of arguments
如果我改用它:
constructorList[0].newInstance(((Object) null));
它可以正常运行JUnit,但在运行时期间失败:java.lang.IllegalArgumentException: wrong number of arguments
唯一的区别似乎是插件中运行的代码与独立的JUnit。 有谁知道这可能是根本原因吗?我不确定如何设置我的JUnit作为JUnit插件运行,所以我无法测试它。
newInstance方法的JavaDoc:
...
如果底层所需的形式参数的数量 构造函数 *为0,提供的
initargs
数组可以是0或null。@param initargs要作为参数传递的对象数组 *构造函数调用;原始类型的值包含在中 *适当类型的包装器对象(例如浮点数) *在{@link java.lang.Float Float})
...
答案 0 :(得分:2)
老实说,我能想到的唯一解释是你在这些情况下以某种方式加载了两个不同版本的类(这听起来并不像它那样牵强,因为Eclipse RCP使用OSGi,它做了一些技巧用classloading)。如果类没有声明的构造函数并且不是内部类,constructorList[0].newInstance(((Object) null))
在任何情况下都不适用。