无法实例化类,因为构造函数

无法实例化类,因为构造函数

问题描述:

我正在进行一种包扫描。这可能不是最好的路线,但我在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)