Java泛型方法声明需在返回类型前加<类型形参>,如public static <T> T getFirst(List<T> list),类型参数仅在方法内有效,与类是否泛型无关。

Java 中泛型方法的声明,核心是在返回类型前加一对尖括号,里面写类型形参(如
泛型方法的基本声明格式
语法结构为:<类型形参列表> 返回类型 方法名(参数列表)。注意尖括号必须紧挨在返回类型之前,不能放在修饰符(如 public、static)前面。
- ✅ 正确示例:
public static <T> T getFirst(List<T> list) - ✅ 多个类型形参:
public <K, V> Map<K, V> createMap(K key, V value) - ❌ 错误写法:
public <T> static T method()(<T>位置错) - ❌ 错误写法:
public static T <T> method()(顺序颠倒)
调用时如何指定独立类型
泛型方法支持两种调用方式:类型推断(自动)和显式指定(手动)。当编译器无法准确推断,或需要覆盖默认推断结果时,就必须显式指定类型实参。
- 显式指定写法:在方法名前加
<具体类型>,例如Util.<String>max(strArray) - 适用于静态方法:
Arrays.<Integer>asList(1, 2, 3) - 也适用于实例方法:
myService.<User>fetchById(id) - 若方法有多个类型参数,按声明顺序填满,如
Pair.<String, Integer>of("name", 100)
类型参数可带边界限定
泛型方法的类型形参可以像泛型类一样加 extends 边界,用于约束传入的实际类型必须满足条件。
立即学习“Java免费学习笔记(深入)”;
- 限定为某类或其子类:
<T extends Number> double sum(T a, T b) - 限定实现某接口:
<T extends Comparable<T>> T max(T x, T y) - 多个边界用 & 连接:
<T extends Runnable & AutoCloseable> void execute(T task) - 注意:边界中不能使用通配符(如
? extends List<String>),只能是具体类型或类型变量
与泛型类中的方法区别
泛型类中也可以定义泛型方法,二者类型参数完全独立——类的泛型参数(如 class Box<T> 中的 T)和方法自己的 <U> 互不影响。
- 例如:
class Box<T> { <U> void put(U item) { ... } },调用box.<String>put("abc")中的String是U的实参,和T无关 - 若方法未声明自己的类型参数,直接使用类的
T,那就不是“独立”的泛型方法,而是依赖类泛型的作用域 - 真正独立,意味着即使类不是泛型的,该方法也能正常工作


















