java泛型方法通过在返回类型前声明类型参数(如)实现多类型适配与编译期类型安全,不依赖所在类是否为泛型类;支持多参数、边界限制、自动推断及显式指定。

Java 中泛型方法通过在方法声明前添加类型参数(如 <t></t>)来实现,使方法能适配多种类型,同时保留编译期类型安全。
泛型方法的基本写法
泛型方法的类型参数写在返回类型之前,用尖括号包裹。它不依赖于所在类是否为泛型类。
- 语法格式:
public <t> T methodName(T param) { ... }</t> - 类型参数可有多个,如
<k v></k>,也可带边界限制,如<t extends comparable>></t> - 返回类型可以是泛型类型、具体类型,也可以是 void
常见泛型方法示例
以下是一些实用且易理解的泛型方法写法:
-
简单类型转换封装:
public <t> T getFirst(List<t> list) { return list != null && !list.isEmpty() ? list.get(0) : null; }</t></t> -
带上限约束的方法:
public <t extends number> double sum(T a, T b) { return a.doubleValue() + b.doubleValue(); }</t> -
泛型数组创建(需绕过类型擦除):
public <t> T[] newArray(Class<t> type, int size) { @SuppressWarnings("unchecked") T[] arr = (T[]) new Object[size]; return arr; }</t></t>
泛型方法的调用方式
泛型方法调用时,类型参数通常由编译器自动推断,无需显式指定;但必要时也可手动传入。
-
自动类型推断(最常用):
String first = getFirst(Arrays.asList("a", "b"));→ 编译器推断T为String -
显式指定类型(用于推断失败时):
Number n = Util.<integer>sum(1, 2);</integer>(假设方法在工具类Util中) -
静态泛型方法调用更灵活:无论类是否泛型,静态泛型方法都可直接通过类名调用,如
Collections.<string>emptyList()</string>
注意事项与常见误区
编写和使用泛型方法时,有几个关键点容易出错:
- 泛型方法的类型参数作用域仅限该方法,不能用于类成员变量或类级别逻辑
- 不能用泛型类型创建实例:
new T()是非法的,需借助Class<t></t>参数或工厂对象 - 基本类型不能作为类型实参(如
<int></int>),只能用包装类(<integer></integer>) - 若方法签名中未出现类型参数(如
public <t> void foo() {...}</t>),则无法推断T,必须显式指定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











