我正在尝试建立一个系统来响应我的应用程序中发生的事件,类似于Observer模式.在我的系统中,EventProducers触发事件,EventConsumers响应这些事件,两者通过中央集线器连接:
目前,我将忽略EventProducer并专注于EventHub和EventConsumer:
interface EventConsumer
问题在于HashMap的声明:我希望能够做类似的事情
HashMap
因此EventConsumer的参数化类型与Class相同,但我能得到的最接近的是
HashMap
但是,这将允许诸如HashSet< EventConsumer< MouseClickEvent>>之类的内容.被分配给Class< KeyPressEvent>,假设KeyPressEvent和MouseClickEvent子类Event.
第二个问题在于subscribeToEvent:我需要能够将消费者存储在与其事件相对应的正确集合中,例如
subscriptions.get(E.class).put(consumer)
但我无法在运行时获得E级.
最佳答案
您可以从EventConsumer类中删除泛型.但是你必须在EventConsumer的每个实现中强制转换Event对象.
interface EventConsumer {
void respondToEvent(Event event);
}
class ClickEventConsumer implements EventConsumer {
public void respondToEvent(Event event){
ClickEvent ce = (ClickEvent)event;
//...
}
}
class EventHub {
private HashMap