java泛型通过类型参数实现编译期类型安全与代码复用,属编译器静态检查机制;泛型类/方法/接口需声明类型变量(如t、e),使用时传入具体类型;受类型擦除限制,运行时无泛型信息,不可创建泛型数组或用instanceof判断。

Java 泛型通过在类、接口或方法定义中引入类型参数(如
泛型类的定义与使用
在类名后加尖括号声明一个或多个类型变量,最常见的是
- 定义时只写占位符,不指定具体类型;使用时才代入,例如
Box<string></string>或Box<integer></integer> - 编译器会根据实际类型自动推导,构造器可简写为
new Box()(钻石语法) - 不能用基本类型(如
int),必须用包装类(Integer) - 泛型类实例之间无继承关系:
Box<string></string>和Box<object></object>不是父子类
泛型方法的定义与使用
方法签名前单独声明类型参数,适用于不依赖类泛型、但又需类型灵活的场景,尤其适合工具类中的通用操作。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 格式为
<t> 返回类型 方法名(参数)</t>,例如public <t> void print(T item)</t> - 静态方法无法直接使用所在类的泛型参数,必须自己声明泛型(如
<t> static T getFirst(List<t> list)</t></t>) - 调用时通常可省略显式类型,编译器能从实参推断;必要时可写成
Utils.<string>print("hello")</string>
泛型接口与通配符的实用要点
泛型接口常用于定义通用契约(如 Comparable<t></t>、Function<t></t>);而通配符则解决泛型类型之间的兼容性问题。
- 接口定义类似泛型类:
interface Result<t> { T getData(); }</t> -
extends T>表示“上界”,只能读取,适合生产者(Producer Extends) -
super T>表示“下界”,只能写入,适合消费者(Consumer Super) - 无界通配符
>表示未知类型,仅支持Object方法(如toString())
类型擦除与注意事项
Java 泛型在编译后会被擦除,即运行时所有泛型信息都不存在,只保留原始类型(如 Box<t></t> → Box)。这带来一些限制:
- 不能在运行时获取泛型实际类型(
obj.getClass()拿不到 T) - 不能创建泛型数组:
new T[10]编译报错,需改用new Object[10]后转型 - 不能用泛型类型做
instanceof判断(如if (x instanceof List<string>)</string>非法) - 静态上下文中无法访问类的泛型参数(因类型擦除后无对应信息)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










