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)