2013-04-24 2 views
0

일종의 패키지 검색 작업 중입니다. 이것은 아마도 최선의 경로는 아니지만 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); 
    } 

.

clazz.getConstructor(clazz.getClass()) 

그것은 당신이로 정의 된 생성자를 찾고 있다는 것을 의미

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) 

답변

2

문제는이 라인은 다음과 같습니다 : 나는 아직도이 예외를보고 있어요

public GetDashboardHandler(Class data) { 

하지만 매개 변수로 HashMap을 원한다 :

clazz.getConstructor(HashMap.class) 
관련 문제