java泛型方法通过在返回类型前声明实现,可独立于类泛型存在,支持类型推断、边界限定及静态使用,所有检查在编译期完成。

Java 中实现泛型方法,核心是在方法声明中显式引入类型参数,用尖括号
泛型方法的基本语法
格式统一为:修饰符
-
T 可用于参数类型:如
T[] array、List<t> list</t> -
T 可用于返回类型:如
public T getFirst(List<t> list)</t> - T 可用于方法体内部变量或逻辑:如做类型判断、构造泛型对象等
在普通类中定义泛型方法
无需类本身带泛型,直接写即可:
public class Utils {
// 泛型方法:打印任意类型数组
public <t> void print(T[] arr) {
for (T item : arr) {
System.out.print(item + " ");
}
System.out.println();
}
// 泛型方法:返回数组第一个元素
public <t> T first(T[] arr) {
return arr == null || arr.length == 0 ? null : arr[0];
}
}</t></t>
调用时无需写 <string></string>,编译器自动识别:
Utils u = new Utils();
u.print(new String[]{"a", "b"}); // 推断 T = String
u.print(new Integer[]{1, 2, 3}); // 推断 T = Integer
String s = u.first(new String[]{"x"}); // 返回 String,无强制转换
在泛型类中定义泛型方法
类已有类型参数(如 class Box<t></t>),其内部泛型方法可复用该 T,也可声明新参数(如 <u></u>):
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
class Box<t> {
private T value;
// 复用类的 T
public T getValue() { return value; }
// 声明独立类型参数 U
public <u> void copyTo(List<u> target, U newItem) {
target.add(newItem);
}
}</u></u></t>
注意:方法的 <u></u> 和类的 T 互不影响,各自独立推断。
带边界限制的泛型方法
用 extends 限定类型参数的上界,增强类型安全和可用操作:
-
<t extends comparable>></t>:T 必须实现 Comparable,可调用compareTo() -
<t extends number></t>:T 是 Number 或其子类,可调用doubleValue()等
public <t extends comparable>> T max(T a, T b) {
return a.compareTo(b) >= 0 ? a : b;
}
// 调用合法:max(3, 5)、max("x", "y")
// 调用非法:max(new Object(), new Object()) —— 编译不通过</t>
静态泛型方法必须显式声明类型参数
静态方法不能访问类的类型参数(因类泛型在实例化时才确定),所以静态泛型方法一定要自己带 <t></t>:
public class CollectionsUtil {
// ✅ 正确:静态方法自带 <t>
public static <t> List<t> singletonList(T item) {
return Arrays.asList(item);
}
// ❌ 错误:若类是泛型类,静态方法不能直接用类的 T
// public static List<t> wrong() { ... } // 编译报错
}</t></t></t></t>
泛型方法本质是“一次编写、多处适配”,关键在于类型参数声明位置和边界控制,不需要运行时支持,所有检查都在编译期完成。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










