如何制作一种方法来创建由抽象类指定的泛型类的新实例?

时间:2019-01-09 00:15:46

标签: java generics reflection constructor abstract-class

我试图基于事件类列表在循环中实例化和注册侦听器类。我正在尝试使用以下列表:

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中创建通用类实例的问题的重复。这是一个更具体的情况,需要更复杂的解决方案。

0 个答案:

没有答案