泛型类在编译期保证类型安全,通过类型参数(如t)替代具体类型、边界限制(如t extends number)、实例化时锁定引用类型、编译器静态校验(插入/读取/赋值)及通配符(? extends / ? super)实现全程类型约束。

泛型类在编译期保证类型安全,核心是把类型检查前移到写代码阶段——不是靠运行时拦错,而是让错误根本通不过编译。
声明时用类型参数代替具体类型
定义类时不写死 String、Integer 等,而是用 T 这样的占位符:
- private T data; —— 成员变量不绑定实际类型,只依赖 T 的约束
- public void set(T value) —— 方法参数和返回值都基于 T,编译器据此推断合法输入/输出
- 可加边界限制,如
,确保能调用 doubleValue() 等共通方法,避免后续调用出错
实例化时锁定类型范围
创建对象时填入真实引用类型,编译器立刻固化该实例的行为边界:
-
Box
box = new Box(); → 只允许 set("hello"),set(123) 直接报错 -
Box
numBox = new Box(); → get() 返回 Integer,不用强转,也不会返回 String - 尖括号里必须是引用类型(不能写 Box
),否则编译不通过
编译器全程做静态校验
它不依赖虚拟机,而是在生成字节码前完成三类关键检查:
- 插入校验:往 List
里 add("true")?编译器立刻拦截 - 读取校验:从 Map
中 get("id"),自动认定返回 User,禁止赋给 String 变量 - 赋值校验:把 Box
赋给 Box?编译失败——泛型是不变的,防止运行时混入非法类型
配合通配符守住多态场景的安全底线
当方法要处理多种子类型集合时,硬写具体类型会卡死调用方,改用通配符并明确读写权限:
-
List extends Number>:可传入 List
或 List ,但禁止 add()(只读安全) -
Collection super Integer>:可接受 Collection
或 Collection - 避免用 List> 或 List,前者失去类型信息,后者等于放弃编译检查
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











