我正在使用此代码实例化一个新类:
Class<?> clazz; Object object;
clazz = Class.forname(package.ClassName);//dynamic classes
object = clazz.newInstance();
现在的问题是,每当我运行此代码时,它就会给我一个 NoSuchMethodExeception : package.ClassName.
ClassName有一个参数,我不能删除它,因为它是必须的。
我尝试删除该参数,然后错误消失了(出于某种原因,参数必须始终存在)。
为什么这样工作?
根据文档,该函数Class#newInstance
只能初始化提供无参数构造函数的类。
如果要初始化不提供无参数构造函数的类型,因此需要构造函数的调用者提供参数,则可以使用java.lang.reflect.Constructor-API。
Constructor<?> constr = clazz.getConstructor(classTypeOfArgument);
Object instance = constr.newInstance(paramInstance);
注意:在这种情况下,使用原始类型是一个非常糟糕的主意,因为您似乎已经知道要处理的类型。
@Shankar Saran Singh这与运行时动态类型创建完全无关,您提供的代码片段根本无法解决作者的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句