Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用泛型在Java中编写类型约束

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

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

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

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

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

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

我想做一些像这样的事情

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

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

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

EN

回答 2

Stack Overflow用户

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

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

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

票数 1
EN

Stack Overflow用户

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

最后:

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

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

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

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

https://stackoverflow.com/questions/34511153

复制
相关文章
TypeScript-在泛型约束中使用类型参数
如上的代码在编译器当中是会报错的,报错的原因就是它不知道 obj[key] 返回的到底是不是 any 这个类型,这个错其实可以不用管,如果要想解决这个错误可以利用 interface 来解决,我可以先给出利用 interface 解决这个错误的代码:
杨不易呀
2023/09/28
2110
TypeScript-在泛型约束中使用类型参数
Kotlin 泛型:类型参数约束
上一篇文章讲了 Kotlin 泛型:基本使用,接下来我们再进一步了解泛型使用相关的进阶知识。
Kkkiro
2023/02/24
2.3K0
【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 )
泛型作用 : 为 类 , 接口 , 方法 提供复用性 , 支持类型不确定的数据类型 ;
韩曙亮
2023/03/28
5.4K0
【Kotlin】泛型 ① ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 )
将 泛型参数 T 放在 尖括号 <T> 中 , 该泛型参数放在 类名后 , 主构造函数之前 , 该泛型参数 T 是 类型占位符 ,
韩曙亮
2023/03/30
2.9K0
C#中的泛型(类型参数的约束)
RemoveElement方法用于删除数组中指定位置的元素,PrintArrayInfo方法用于输出数组。
卡尔曼和玻尔兹曼谁曼
2019/01/25
3.7K0
Java 泛型中的类型推断
这样写,编译器报错: jshell> List<?> unknows = new ArrayList<?>() | Error: | unexpected type | required:
一个会写诗的程序员
2018/08/17
3K0
【Kotlin】泛型总结 ★ ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协变 | in 逆变 | reified 检查泛型参数类型 )
将 泛型参数 T 放在 尖括号 <T> 中 , 该泛型参数放在 类名后 , 主构造函数之前 , 该泛型参数 T 是 类型占位符 ,
韩曙亮
2023/03/30
4.1K0
【Kotlin】泛型总结 ★ ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协变 | in 逆变 | reified 检查泛型参数类型 )
Kotlin 范型之泛型约束、类型投影、星号投影
Kotlin 跟 Java 一样,也拥有泛型约束。Java 使用 extends 关键字指明上界。
fengzhizi715
2019/10/08
2.7K0
泛型在Java中的应用
在对该类进行实例化时,需要将泛型指定为具体的包装类,此时,在实例化泛型类时,就可以起到编译时检查的作用。
头发还在
2023/10/16
1780
TypeScript中泛型及泛型函数、泛型类、泛型接口,泛型约束,一文读懂
 最近在学TypeScript,然后整理了一下关于TypeScript中泛型的一些笔记。
痴心阿文
2022/11/21
2.8K0
C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托
给.neter们整理了一份《.NET/C#面试手册》,目前大约4万字左右,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间。对于没有跳槽打算的也可以复习一下相关知识点,就当是查缺补漏!
全栈程序员站长
2022/09/14
2.6K0
C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托
什么是泛型以及在集合中泛型的使用[通俗易懂]
泛型最常与集合使用,因为泛型最开始开始被加入Java就是为了解决集合向下转型一类问题的。如果我们有这样一个需求:定义一个描述类圆,要求圆中的数据类型是不确定的,也就是声名属性的时候,属性类型是不确定的。比如描述类圆中有半径,要求半径可以用int,也可以用double。那么此时数据类型不确定,就使用泛型,把数据类型参数化。
全栈程序员站长
2022/06/25
2.1K0
TypeScript-泛型约束
博主需求: 要求指定的泛型类型必须有 length 属性才可以指定该类型为泛型的类型:
杨不易呀
2023/09/28
2300
TypeScript-泛型约束
泛型类、泛型方法、类型通配符的使用
       你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。
泰斗贤若如
2019/06/19
3.8K0
Java 泛型使用
泛型是Java中一项十分重要的特性,在Java 5版本被引入,在日常的编程过程中,有很多依赖泛型的场景,尤其是在集合容器类的使用过程中,更是离不开泛型的影子。
zhipingChen
2018/12/24
8100
【Java基础】Java中泛型的使用
如下代码是一个使用了泛型的实体类,E表示这里类型使用的了泛型,意思是可以为任意类型,也包括引用数据类型。
全栈开发日记
2022/05/12
5540
Java泛型类型擦除问题
以前就了解过Java泛型的实现是不完整的,最近在做一些代码重构的时候遇到一些Java泛型类型擦除的问题,简单的来说,Java泛型中所指定的类型在编译时会将其去除,因此List<String> 和 List 在编译成字节码的时候实际上是一样的。因此java泛型只能做到编译期检查的功能,运行期间就不能保证类型安全。我最近遇到的一个问题如下:
用户7353950
2022/06/23
1.1K0
JAVA泛型与类型擦除
为什么要用T而不是其它字母?事实上是可以任意字符串(如Result< something >),但是为了显得专业,一般约定几个大写字母在不同场景使用。
acupt
2019/08/26
1.8K0
(二十四)泛型约束
在我们之前的定义泛型的时候可以给它传递任何类型的泛型,但是在开发中我们需要在固定的类型中选择一个传递,传递其他的则无效,像这样约束泛型该怎么写呢
老怪兽
2023/02/22
1880
Java中泛型的介绍和使用
我们都知道Java里的集合(list,map....)是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。看下面这段示例代码
框架师
2019/12/02
8410

相似问题

类型记录:在泛型类型约束中推断泛型类型

115

使用泛型约束类型

10

在泛型泛型类型上指定类型约束

21

泛型约束中的泛型类型

34

在泛型约束中使用类型

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文