java.lang.NoSuchMethodException:package.ClassName。<init>()使用Class <?>

时间:2019-11-18 09:01:37

标签: java class

我正在使用以下代码实例化一个新类:

config/app.php

现在的问题是,每当我运行这段代码时,它就会给我Class<?> clazz; Object object; clazz = Class.forname(package.ClassName);//dynamic classes object = clazz.newInstance();

ClassName有一个参数,因为它是必须的,所以我不能删除它。

我尝试删除参数,然后错误消失了(出于某种原因参数必须始终存在)。

为什么这样工作?

2 个答案:

答案 0 :(得分:2)

根据documentation,函数Class#newInstance仅能初始化提供无参数构造函数的类。

如果要初始化不提供无参数构造函数的类型,因此需要构造函数的调用者提供参数,则可以使用java.lang.reflect.Constructor-API

Constructor<?> constr = clazz.getConstructor(classTypeOfArgument);
Object instance = constr.newInstance(paramInstance); 

注意:在这种情况下,使用原始类型是一个相当糟糕的主意,因为您似乎已经知道要处理的类型。

@Shankar Saran Singh这与在运行时动态类型创建完全无关,您提供的代码段根本无法解决作者的问题。

答案 1 :(得分:1)

据我了解,您的课程没有默认的构造函数。这就是为什么您会遇到这种异常。因此,如果您在类中创建了任何构造函数,则必须显式实现默认构造函数。此异常来自clazz.newInstance();