java泛型类通过类名后加声明类型参数,创建对象时指定具体类型(如string),编译期即检查类型安全;t代表非基本类型,可用于字段、参数和返回值;new时用box实例化,支持菱形运算符;不可用基本类型、静态成员不能用t、泛型数组需规避。

Java 中定义和使用泛型类,核心就两点:在类名后加
怎么定义一个泛型类
用单个大写字母(推荐 T、E、K、V)占位,代表将来传入的具体类型。这个字母在整个类内部都可以当真实类型用:
- 声明格式:class 类名
{ ... } - T 可以是任意非基本类型(不能是 int、char,但可以用 Integer、Character)
- 类中字段、方法参数、返回值都可以用 T,比如 private T data;、public void set(T value)、public T get()
- 常见命名习惯:T 表示 Type,E 表示 Element(集合常用),K/V 用于 Map
怎么使用泛型类
关键动作发生在 new 的时候——指定具体类型,之后所有 T 都被替换成它:
- 写法:Box
box = new Box(); (JDK7+ 支持菱形运算符 省略右侧) - 此时 box 只能存 String,set(123) 编译失败;get() 返回 String,不用强转
- 可以多次复用同一个类:再写 Box
intBox = new Box(); ,就得到一个专存数字的版本 - 不写泛型(如 Box box = new Box();)会退化为“原始类型”,失去类型检查,不推荐
一个完整可运行的例子
下面是一个带构造器和 getter/setter 的泛型容器类,加上测试代码:
- 泛型类定义:
public class Box{
private T content;
public Box(T content) { this.content = content; }
public void setContent(T content) { this.content = content; }
public T getContent() { return content; }
} - 使用方式:
BoxsBox = new Box("hello");
String str = sBox.getContent(); // 直接得 String
BoxdBox = new Box(3.14);
double d = dBox.getContent(); // 自动拆箱,无需 (Double)
新手容易踩的坑
避开这几个典型错误,能少走很多弯路:
-
基本类型不能直接用:写 Box
会报错,必须用包装类 Box -
泛型不参与运行时类型识别:Box
和 Box 编译后都是 Box,所以 if (obj instanceof Box ) 是非法语法 - 静态成员不能用类的泛型参数:T 属于实例,static 方法/字段里不能出现 T,否则编译失败
-
数组不能直接用泛型类型创建:new Box
[10] 不合法,要用 Object[] 转换或改用 ArrayList
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











