java - 使用泛型在 Java 中编码类型约束

标签 java generics types casting

我正在制作一个系统,其中生产者模块生成事件,而消费者模块消耗这些事件。路由器类将每个生产者生成的事件发送到其消费者列表。事件有不同类型,因此 Producer 和 Consumer 类都通过通用的“EventType”进行参数化。

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

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

Map<Producer, List<Consumer>> src_to_consumers;

我想做一些类似的事情

Map<Producer<EventType>, List<Consumer<EventType>>> src_to_consumers;

除非没有约束,所有生产者/消费者集合对必须具有相同的 EventType。

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

最佳答案

我认为将所有内容都存储在一张 map 中并不是一个好主意。我相信你有其他选择会更好。 map 在这里并不是万能的。如果我是你,我会完全设计一个 Activity 管理类,其中包含所需数量的成员。如果您可以在一张 map 中减少所有需求,那就继续吧!只要保持开放的想法,即您不限于单个对象,即使它模糊地看起来像您可以。

但是,已经有一些工具可以为您完成整个事件管理。它们被称为事件总线。它们有很多,搜索它们会给你带来很多结果,只需选择最适合你需要的一个即可。

关于java - 使用泛型在 Java 中编码类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34511153/

相关文章:

javascript - 如何添加 Jasmine 自定义匹配器 Typescript 定义?

java - 在事件发生时将自定义对象存储在 JLabel 中

java - 创建我的第一个 JDBC 领域(Glassfish V3)

java - JAVA上使用RSA加密解密的问题

scala - 通用类型,这样一个方法的结果可以再次用作另一个方法的参数

c# - 从 BlockingCollection 中取出项目的正确方法是什么?

通过将类作为函数参数传递来调用类方法的 Swift 依赖注入(inject)

java - Spring JDBC 模板 - Oracle DB 函数返回 null

java - 使用通用接口(interface)和类

postgresql - 在 PostgreSQL 中找不到函数