泛型方法参数限定用extends声明上界,约束可调用的类型而非传入值;可限定实现接口(如Comparable)、继承类(如Number)或多条件组合(用&连接,类须在前);同类型参数通过共用类型变量T保证。

泛型方法参数的限定,核心是用 extends 关键字声明类型上界,让编译器知道这个类型必须满足什么条件。它不是限制“传什么值”,而是约束“能用什么类型来调用这个方法”。
用 extends 限定必须实现某个接口
最常见的是要求类型可比较:
-
public <T extends Comparable<T>> T max(T a, T b) —— T 必须实现
Comparable<T>,才能调用compareTo() - 如果传入
String或Integer没问题;传Object或自定义类(没实现Comparable)会编译报错
用 extends 限定必须继承某个类
适用于需要调用父类特有方法的场景:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
public <T extends Number> double sum(T a, T b) —— T 只能是
Number或其子类(如Integer、Double) - 方法体内可安全调用
a.doubleValue(),因为所有Number子类都支持
多个限定用 & 连接
当一个类型需同时满足多个条件时:
- public <T extends Comparable<T> & Serializable> void save(T obj)
- T 既要能比较,又要可序列化;两个条件缺一不可
- 注意:& 后不能跟类,只能是接口;如果有类,它必须写在最前面(如
T extends MyClass & InterfaceA & InterfaceB)
限定两个参数类型相同
这不是靠 extends 单独完成的,而是通过共用同一个类型变量实现:
- public <T> boolean isEqual(T a, T b) —— a 和 b 都必须是同一个 T
- 调用
isEqual("x", "y")→ T 推断为String - 调用
isEqual("x", 123)→ 编译失败,无法统一推断出一个 T

















