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

Java 中定义泛型方法,核心是把类型参数声明在返回类型之前、访问修饰符之后,用尖括号包裹,比如 <t></t> 或 <k v></k>。它不依赖类是否泛型,独立作用于方法本身,让同一段逻辑能安全适配多种引用类型。
基本写法和位置不能错
类型参数必须紧挨在访问修饰符后面、返回类型前面,顺序固定:
- ✅ 正确:
public <t> void print(T value)</t> - ✅ 正确:
private <k v> V get(Map<k v> map, K key)</k></k> - ❌ 错误:
public void <t> print(T value)</t>(类型参数不能放在返回类型后) - ❌ 错误:
public <t><u> void method()</u></t>(不能拆成两组尖括号)
用 extends 约束类型能力
单个或多个类型参数都可以加边界限制,确保传入类型具备所需行为:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
<t extends number></t>:T 必须是 Number 或其子类(如 Integer、Double) -
<t extends comparable> & Serializable></t>:T 要同时可比较且可序列化 -
<k extends comparable>, V extends Cloneable></k>:两个参数各自约束,互不影响
支持多类型协作与依赖
泛型方法允许参数之间建立逻辑关系,这是类泛型做不到的:
-
public <t r> R convert(T source, Function<t r> mapper)</t></t>:source 类型决定 mapper 入参,R 决定返回类型 -
public <k v extends k> void handle(K base, V derived)</k>:确保 derived 是 base 的子类型 - 调用时若编译器无法推断(如参数为 null 或无实参),需显式指定:
Util.<string integer>convert(...)</string>
返回值可结合通配符提升灵活性
当返回结构较复杂、又不想过度限定具体实现时,可在返回类型中使用通配符:
-
<t> List extends T> filter(List<t> items, Predicate<t> p)</t></t></t>:返回只读视图,安全读取 T 实例 - ⚠️ 注意:通配符只能出现在参数或返回类型中,不能用于类型参数声明(
extends T>是非法的)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










