需要一些使用Java Generics的帮助

前端之家收集整理的这篇文章主要介绍了需要一些使用Java Generics的帮助前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试建立一个系统来响应我的应用程序中发生的事件,类似于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

猜你在找的Java相关文章