Java泛型方法将类型参数声明在访问修饰符后、返回类型前,如<T>,支持多类型约束与协作,可配合extends限定边界,返回值可用通配符增强灵活性。

Java 中定义泛型方法,核心是把类型参数声明在返回类型之前、访问修饰符之后,用尖括号包裹,比如 <T> 或 <K, V>。它不依赖类是否泛型,独立作用于方法本身,让同一段逻辑能安全适配多种引用类型。
基本写法和位置不能错
类型参数必须紧挨在访问修饰符后面、返回类型前面,顺序固定:
- ✅ 正确:
public <T> void print(T value) - ✅ 正确:
private <K, V> V get(Map<K, V> map, K key) - ❌ 错误:
public void <T> print(T value)(类型参数不能放在返回类型后) - ❌ 错误:
public <T> <U> void method()(不能拆成两组尖括号)
用 extends 约束类型能力
单个或多个类型参数都可以加边界限制,确保传入类型具备所需行为:
-
<T extends Number>:T 必须是 Number 或其子类(如 Integer、Double) -
<T extends Comparable<T> & Serializable>:T 要同时可比较且可序列化 -
<K extends Comparable<K>, V extends Cloneable>:两个参数各自约束,互不影响
支持多类型协作与依赖
泛型方法允许参数之间建立逻辑关系,这是类泛型做不到的:
立即学习“Java免费学习笔记(深入)”;
-
public <T, R> R convert(T source, Function<T, R> mapper):source 类型决定 mapper 入参,R 决定返回类型 -
public <K, V extends K> void handle(K base, V derived):确保 derived 是 base 的子类型 - 调用时若编译器无法推断(如参数为 null 或无实参),需显式指定:
Util.<String, Integer>convert(...)
返回值可结合通配符提升灵活性
当返回结构较复杂、又不想过度限定具体实现时,可在返回类型中使用通配符:
-
<T> List<? extends T> filter(List<T> items, Predicate<T> p):返回只读视图,安全读取 T 实例 - ⚠️ 注意:通配符只能出现在参数或返回类型中,不能用于类型参数声明(
<? extends T>是非法的)


















