泛型类的静态方法不能直接使用类的泛型参数T,必须独立声明类型参数,如public static E getValue(E input),并注意类型擦除限制。

静态方法必须单独声明泛型参数
就像普通顶层类的方法一样,静态方法的泛型要写在返回值前,用 `
- 错误写法:试图直接用外部类的 `T` —— 编译通不过
- 正确写法:`public static
E getValue(E input) { return input; }` - 类型参数名建议与外部类区分开(如不用 `T` 而用 `E` 或 `R`),避免混淆语义
常见使用场景示例
比如工具类中常见的泛型静态方法:
- 数组转列表:
public static <t> List<t> asList(T... elements)</t></t> - 空值安全转换:
public static <t> T orElse(T value, T defaultValue)</t> - 构建器模式入口:
public static <t> Builder<t> of(Class<t> type)</t></t></t>
注意类型擦除的影响
静态泛型方法在运行时也受类型擦除限制——实际执行中无法获取 `E` 的具体类型(比如 `String.class`)。如果需要运行时类型信息,得额外传入 `Class
public static <t> T newInstance(Class<t> clazz) throws Exception { return clazz.getDeclaredConstructor().newInstance(); }</t></t>
不复杂但容易忽略


















