泛型方法可在非泛型类中定义,类型参数须置于访问修饰符后、返回类型前;仅限本方法作用域,可用于参数、返回值、局部变量等,不可用于字段;支持多参数及约束(c#用where,java用extends);调用时通常自动类型推断。

泛型方法可以在非泛型类中直接定义,无需类本身泛型化。关键在于把类型参数写在返回类型之前,并确保它只在本方法作用域内生效。
声明位置必须准确
类型参数要用尖括号
public
public void
public
类型参数仅限本方法使用
方法中声明的 T 无法被同类其他方法访问,也不能用于字段或静态变量声明:
- ✅ 可用于参数类型、返回类型、局部变量、泛型数组(如 T[])、泛型集合(如 ArrayList
) - ❌ 不可用于类字段:private T cache;(编译报错)
- ❌ 不可在另一个方法里复用同一个 T 名称(即使含义相同,也属不同作用域)
支持多类型参数与约束(以 C# 为例)
当需要更精确控制类型行为时,可声明多个参数并添加约束:
public static TOutput ConvertAll
说明:
-
TOutput 必须有无参构造函数,且实现 ICollection
- 约束紧跟在参数列表后,用 where 引导
- Java 不支持 where 约束,但可用 extends 限定上界(如
> )
调用时优先依赖类型推断
多数场景下不必显式写出类型实参,编译器能从入参自动判断:
print("hello") → 推断 T = String
print(42) → 推断 T = Integer(Java)或 int(C#,经装箱)
显式写法(如 print
- 方法无参数,仅靠返回值类型决定泛型(如
T getDefaultValue() ) - 参数为 null,编译器无法推断
- 存在多个泛型参数且部分无法从参数推出










