java泛型类通过声明类型参数,实现编译期类型安全与免强转;支持t/e/k/v等常用类型参数标识,但不支持静态成员、基本类型及运行时类型操作。

Java 中泛型类通过在类声明时用尖括号 <t></t> 声明类型参数,让类能适配多种具体类型,同时在编译期保障类型安全、避免强制转换。
泛型类的基本定义格式
语法结构为:class 类名 { ... },其中类型参数常用单个大写字母表示:
-
T(Type):最通用,代表任意类型,如
Container<t></t> -
E(Element):多用于集合类,如
ArrayList<e></e> -
K 和 V(Key/Value):常用于映射类,如
Map<k v></k> - 可声明多个参数,如
class Pair<k v></k>
定义一个泛型类的完整示例
下面是一个带泛型字段、构造方法和泛型方法的容器类:
public class Box<t> {
private T content;
public Box(T content) {
this.content = content;
}
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}</t>
注意:类型参数 T 可用于成员变量、方法参数、返回值,但不能用于静态字段或静态方法的类型参数(因类型擦除后无运行时信息)。
泛型类的正确使用方式
实例化时必须指定具体类型(必须是引用类型),编译器据此做类型检查:
-
Box<string> stringBox = new Box("hello");</string>→getContent()返回String,无需强转 -
Box<integer> intBox = new Box(42);</integer>→ 可安全调用intValue()等方法 -
stringBox.setContent(100);→ 编译报错,类型不匹配 - 不能写
Box<int></int>,基本类型不被允许;需用包装类如Integer
常见误区与注意事项
实际开发中容易忽略的关键点:
- 泛型只在编译期有效,运行时已被擦除(即
Box<string></string>和Box<integer></integer>运行时都是Box) - 不能用泛型创建实例,如
new T()是非法的;可用反射或传入Class<t></t>解决 - 不能用泛型类型做
instanceof判断,如if (obj instanceof Box<string>)</string>编译错误 - 未指定泛型(如
new Box())会触发“原始类型”警告,默认按Box<object></object>处理,失去类型保护
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











