我正在做一个系统,其中生产者模块产生事件,消费者模块消费这些事件。路由器类将每个生产者生成的事件发送到其消费者列表。有不同类型的事件,所以生产者和消费者类都由一个通用的"EventType“参数化。
在我的路由器代码中,我有一个将生产者与消费者联系起来的HashMap。我想表达这样的约束:给定生产者的每个消费者必须使用该生产者生产的相同EventType (但表中不同生产者的EventType可能不同)。
目前,在我的Router类中,我将HashMap声明为:
Map<Producer, List<Consumer>> src_to_consumers;
我想做一些像这样的事情
Map<Producer<EventType>, List<Consumer<EventType>>> src_to_consumers;
除非没有限制所有生产者/消费者-集合对必须具有相同的EventType。
有没有办法不用强制转换就能做到这一点呢?
发布于 2015-12-29 12:55:42
我不认为将所有内容都存储在一个地图中真的是一个好主意。我相信你有其他选择会更好。地图在这里不是一刀切的。如果我是你,我会完全设计一个事件管理类,根据需要拥有尽可能多的成员。如果你能在一张地图中减少所有的需求,那就继续吧!只要保持开放的想法,你不会被限制在一个单一的对象,即使它看起来你可以。
然而,已经有一些工具可以为您完成事件的整个管理。它们被称为事件总线。周围有很多这样的网站,搜索它们会给你带来很多结果,只需选择一个最适合你需求的。
发布于 2016-01-02 11:12:00
最后:
无法在数据类型上添加此类型的约束。我所做的是创建了一个新的对象类型"ModuleLinks“,它(对于我的例子)绑定了生产者和消费者,并对它们进行了集合。
class ModuleLinks<EventType>{
Producer<EventType> producer;
List<Consumer<EventType>> consumers;
...
}
然后你可以制作你的HashMap<Producer, ModuleLinks<EventType>>
。
https://stackoverflow.com/questions/34511153
复制