无法实例化类,因为构造函数
问题描述:
我正在进行一种包扫描。这可能不是最好的路线,但我在Google上找到的解决方案似乎比我需要的要多得多。无法实例化类,因为构造函数
我正在努力实例化一个类,它驱使我坚果。这里是我的代码实例:
String[] packageList = {
getPackageName(),
"com.socket.event.handler"
};
for (String packageListName : packageList) {
try {
String className = this.getType(); // getDashboard
className = className.substring(0, 1).toUpperCase() + className.substring(1)+"Handler"; //GetDashboardHandler
clazz = Class.forName(packageListName+"."+className) //shows correct package/class name
.asSubclass(EventHandler.class);
return (EventHandler) clazz.getConstructor(clazz.getClass()).newInstance(getData());
//return (EventHandler) clazz.newInstance();
} catch (ClassNotFoundException e) {
//swallow, this is ok
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
的getData()
使用有看起来像这样: 公众的HashMap的getData(){ 返回数据; }
的类实例化是:
public class GetDashboardHandler extends EventHandler<GetDashboardHandler> {
public String workstationUuid;
public GetDashboardHandler() {
super();
}
public GetDashboardHandler(HashMap<String, Object> data) {
super(data, GetDashboardHandler.class);
}
我有一个默认的构造函数和一个带参数,以满足特定的需求。我仍然看到这个异常:
java.lang.NoSuchMethodException: com.socket.event.handler.GetDashboardHandler.<init>(java.lang.Class)
at java.lang.Class.getConstructor0(Class.java:2730)
at java.lang.Class.getConstructor(Class.java:1676)
at com.socket.SocketMessage.getEventHandler(SocketMessage.java:88)
答
问题是此行
clazz.getConstructor(clazz.getClass())
这意味着你正在寻找被定义为一个构造函数:
public GetDashboardHandler(Class data) {
但你想要一个HashMap作为参数:
clazz.getConstructor(HashMap.class)