java泛型方法需在方法签名最前(修饰符后、返回类型前)用尖括号声明独立类型参数,如,不依赖所在类的泛型;支持多参数、边界限定(如);调用时可类型推断或显式指定util.convert(42)。

Java 泛型方法要独立于类声明泛型参数,核心是把类型变量写在方法签名的最前面——紧挨着 访问修饰符和 static(如果是静态方法)之后、返回类型之前,用尖括号包裹,比如 <t></t>。这个 T 完全属于该方法自身,和它所在的类有没有泛型、叫什么名字、是否是泛型类,都毫无关系。
声明位置必须严格准确
泛型参数声明不能出现在返回类型后面,也不能混进方法参数列表里。正确结构是:
-
public <t> T getValue(T defaultValue)</t>✅ -
public static <k v> Map<k v> newMap()</k></k>✅ -
public void <t> print(T item)</t>❌(<t></t>不能放在void后) -
public <t> void print(T item)</t>❌(void前缺返回类型,语法错误)
不依赖类的泛型,哪怕类本身是泛型
即使方法写在一个泛型类里,比如 class Box<u> { ... }</u>,它的静态方法也不能直接用 U:
-
public static U create() { return null; }❌ 编译失败 ——U对静态方法不可见 -
public static <e> E create() { return null; }</e>✅ 重新声明自己的E,完全独立
支持多参数和类型边界限定
一个方法可以声明多个类型参数,也能加 extends 限定上界:
-
<k v></k>:两个无约束类型 -
<t extends comparable>></t>:要求T实现Comparable -
<t extends number runnable></t>:多重边界(仅限一个类 + 多个接口)
例如:public static <t extends number> double sum(T a, T b) { return a.doubleValue() + b.doubleValue(); }</t>
调用时靠推断或显式指定
大多数情况编译器能自动确定类型:
-
String s = identity("hello");→ 推断T = String -
Number n = convert(42);→ 可能推断为Integer - 当需要明确指定时,写法是
Util.<double>convert(42)</double>,注意<double></double>必须紧贴方法名前,不能写成Util.convert<double>(42)</double>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











