首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用泛型在Java中编写类型约束

使用泛型在Java中编写类型约束
EN

Stack Overflow用户
提问于 2015-12-29 20:33:23
回答 2查看 69关注 0票数 1

我正在做一个系统,其中生产者模块产生事件,消费者模块消费这些事件。路由器类将每个生产者生成的事件发送到其消费者列表。有不同类型的事件,所以生产者和消费者类都由一个通用的"EventType“参数化。

在我的路由器代码中,我有一个将生产者与消费者联系起来的HashMap。我想表达这样的约束:给定生产者的每个消费者必须使用该生产者生产的相同EventType (但表中不同生产者的EventType可能不同)。

目前,在我的Router类中,我将HashMap声明为:

代码语言:javascript
代码运行次数:0
运行
复制
Map<Producer, List<Consumer>> src_to_consumers;

我想做一些像这样的事情

代码语言:javascript
代码运行次数:0
运行
复制
Map<Producer<EventType>, List<Consumer<EventType>>> src_to_consumers;

除非没有限制所有生产者/消费者-集合对必须具有相同的EventType。

有没有办法不用强制转换就能做到这一点呢?

EN

回答 2

Stack Overflow用户

发布于 2015-12-29 20:55:42

我不认为将所有内容都存储在一个地图中真的是一个好主意。我相信你有其他选择会更好。地图在这里不是一刀切的。如果我是你,我会完全设计一个事件管理类,根据需要拥有尽可能多的成员。如果你能在一张地图中减少所有的需求,那就继续吧!只要保持开放的想法,你不会被限制在一个单一的对象,即使它看起来你可以。

然而,已经有一些工具可以为您完成事件的整个管理。它们被称为事件总线。周围有很多这样的网站,搜索它们会给你带来很多结果,只需选择一个最适合你需求的。

票数 1
EN

Stack Overflow用户

发布于 2016-01-02 19:12:00

最后:

无法在数据类型上添加此类型的约束。我所做的是创建了一个新的对象类型"ModuleLinks“,它(对于我的例子)绑定了生产者和消费者,并对它们进行了集合。

代码语言:javascript
代码运行次数:0
运行
复制
class ModuleLinks<EventType>{
    Producer<EventType> producer;
    List<Consumer<EventType>> consumers;
    ...
    }

然后你可以制作你的HashMap<Producer, ModuleLinks<EventType>>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34511153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档