Java中泛型方法显式指定类型参数时,必须将<T>写在类名或对象名之后、方法名之前,如Utils.<String>parse("123");错误写法包括Utils.parse<String>("123")或Utils.<String>.parse("123")。

Java中泛型方法显式指定类型参数,是在调用时用尖括号 <t></t> 写在方法名前,而不是写在类名后。正确的写法是:ClassName.<String>methodName("test"),不是 ClassName.methodName<String>("test")。
泛型方法显式调用的语法结构
显式指定类型参数时,<T> 必须紧跟在类名(或对象名)之后、方法名之前,中间不能有空格或点号隔开:
-
正确:
Utils.<String>parse("123") -
错误:
Utils.parse<String>("123")(编译不通过) -
错误:
Utils.<String>.parse("123")(语法非法)
什么时候需要显式指定类型参数
编译器通常能自动推断类型(类型推导),但以下情况必须或建议显式指定:
- 方法参数无法提供足够类型信息,例如传入
null或泛型通配符 - 返回值类型模糊,比如方法返回
T,而调用处没赋值给具体变量 - 想强制使用某个子类型,绕过默认推断(如推断为
Object,但你想要Integer)
一个完整可运行的例子
假设有一个工具类:
立即学习“Java免费学习笔记(深入)”;
public class Utils {
public static <T> T getValue(T defaultValue) {
return defaultValue;
}
}
调用方式:
- 隐式推导:
String s = Utils.getValue("hello");→ 推出T=String - 显式指定:
Integer i = Utils.<Integer>getValue(null);(否则会推成Object) - 显式指定 + 无返回赋值:
Utils.<Double>getValue(3.14);
静态泛型方法 vs 实例泛型方法
静态方法:用 类名.<T>方法名(...);
实例方法:用 对象引用.<T>方法名(...),例如:list.<String>add("item")(注意:集合类的 add 不是泛型方法,此处仅为语法示意)。


















