泛型方法声明需在返回类型前用尖括号声明类型参数(如<T>),调用时编译器自动推断或显式指定;T仅在方法内有效,静态方法必须独立声明泛型,不可用类泛型;注意类型擦除、不可用基本类型、需边界限定等限制。

Java 泛型方法的声明和调用核心就两点:在返回类型前加类型参数声明(如
泛型方法怎么声明
声明泛型方法必须把类型参数写在返回类型前面,用尖括号包裹,格式是:public <T> 返回类型 方法名(参数)。这里的 T 是类型变量,代表任意引用类型(不能是 int、char 等基本类型)。
- T 可以出现在参数类型、返回类型、局部变量类型甚至异常类型中
- 多个类型参数用逗号分隔,比如 <K, V>、<T, U, R>
- 泛型方法的类型参数只在该方法体内有效,不影响所在类的其他部分
- 静态方法若需使用泛型,必须声明为泛型方法;不能直接用类的泛型参数(因为静态上下文不依赖实例)
泛型方法怎么调用
绝大多数情况下,编译器能根据实参类型自动推断出 T 是什么,不需要手动指定。
- 例如 printValue("hello") → 推断 T 是 String;printValue(42) → 推断 T 是 Integer(自动装箱)
- 当无法推断或需要明确指定时,可显式写出类型: Util.<String, Integer>compare(p1, p2)
- 数组操作类方法(如 swap)常靠传入的数组类型确定 T,比如 swap(new String[]{...}) → T 就是 String
常见注意事项
写泛型方法容易踩几个坑,注意避开:
立即学习“Java免费学习笔记(深入)”;
- 不能用基本类型作为类型参数,只能用包装类(int → Integer,boolean → Boolean)
- 泛型信息在运行时被擦除(type erasure),所以不能用 instanceof 判断 T 的具体类型,也不能 new T()
- 如果方法逻辑依赖类型的特定行为(比如要调用 toString() 或 compareTo()),建议加上边界限定,例如 <T extends Comparable<T>>
- 泛型方法和普通重载方法共存时,编译器优先选择最具体的匹配,要注意签名冲突


















