Java 限定传入的两个泛型参数的类型相同
Java 限定传入的两个泛型参数的类型相同
定义一个泛型方法,同时限制传入的两个泛型参数的类型要相同,整理了一下思路。
1、定义泛型方法
Java 定义泛型方法的格式大致如下:
复制/**
* 泛型方法
* @param a 泛型参数a
* @param b 泛型参数b
* @param <T> 声明此方法持有一个类型T,也可以理解为声明此方法为泛型方法
* @return 此方法的返回值为类型T
*/
public static <T> T test(T a, T b) {
return a;
}
现在要限定泛型参数 a 与 泛型参数 b 传入的类型相同,怎么办呢?
2、超类型限定
既然要限定泛型参数 a 与 b 的类型相同,那么可不可以让 b 作为 a 的子类去实现类型限定呢?
思路如下:
1、声明 参数 a 的类型,直接让 a 继承泛型 T就可以了。
//声明参数a的类型为S,S继承于T
public static <T, S extends T> T test(S a, T b) {
return a;
}
2、声明参数 b 的类型, 继承 Comparable<a>
的类型。 Comparable 是一个泛型接口,实现类必须都重写 compareTo() 方法,因此可以用来限定 b 的类型只能是 a 的 类型,即超类型限定。(如果参数只是包装类,到这里就可以了)
public static void main(String[] args) {
//包装类、当两个参数的类型不同,直接报错
test(1, 2);
}
public static <T, S extends T, W extends Comparable<S>> T test(S a, W b) {
return a;
}
3、传入的是实体类型参数,必须重写 compareTo() 方法 ,因为上文的包装类都默认实现了 compareTo()
方法。
如 User 实体类:
public static void main(String[] args) {
//实体类型,必须重写compareTo()方法
User user1 = new User();
User user2 = new User();
test(user1, user2);
}
public static <T, S extends T, W extends Comparable<S>> T test(S a, W b) {
return a;
}
到这里,就限定了传入的两个泛型参数的类型必须一致,否则报错。
自我控制是最强者的本能-萧伯纳
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!