我试图基于事件类列表在循环中实例化和注册侦听器类。我正在尝试使用以下列表:
static final Class[] USER_EVENTS_HANDLED = {
FirstEvent.class,
SecondEvent.class
};
我有一堆侦听器类,每个侦听器类一个:
FirstEventListener extends MyAbstractListener<T extends MyEvent>
SecondEventListener extends MyAbstractListener<T extends MyEvent>
我目前正在手动手动注册事件类和侦听器类:
eventManager.registerListener(FirstEvent.class, new FirstEventListener());
eventManager.registerListener(SecondEvent.class, new SecondEventListener());
为了可维护性,我正在尝试不重复两次事件名称。我从事件类构建了侦听器类的名称,但是我正在努力想出正确的方法来使用该方法创建侦听器的新实例。首先尝试了newInstance,但随后意识到必须对泛型进行特殊处理。我从某处得到了这样的代码片段:
private static class ListenerGenerator<E> {
E generateListener(Class<E> clazz, Constructor constructor) throws Exception {
return (E) constructor.newInstance();
}
}
因此,为了实现该目的,我尝试调用“ getConstructor”以及其他一些方法,但这一直导致NoSuchMethod错误。
实现目标的最简单方法是什么?
注意:这并非只是在Java中创建通用类实例的问题的重复。这是一个更具体的情况,需要更复杂的解决方案。