java泛型通过将类型作为参数实现类型安全与代码复用,支持泛型类(如box)、泛型接口(如container),可限定类型边界(如),并广泛应用于集合框架(如map),但受类型擦除影响运行时无泛型信息。

Java 中使用泛型编写类型安全且可复用的类与接口,核心是把“类型”当作参数来设计,让同一套逻辑适配多种数据类型,同时把类型检查提前到编译阶段。
泛型类:一次定义,多处复用
在类名后加
- 定义时用 T 占位,不写具体类型:例如
class Box<t> { private T value; public void set(T value) { ... } public T get() { ... } }</t> - 使用时指定实际类型:如
Box<string> box1 = new Box();</string>或Box<integer> box2 = new Box();</integer> - 编译器会阻止类型不匹配操作:比如
box1.set(123)直接报错,box1.get()返回 String,无需强转
泛型接口:约束行为,保持灵活性
接口也能带类型参数,常用于定义通用契约。实现类在实现时绑定具体类型,或自身也声明为泛型。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 定义泛型接口:
interface Container<t> { void add(T item); T get(int index); }</t> - 实现类可固定类型:
class StringList implements Container<string> { ... }</string> - 也可继续泛型化:
class GenericList<t> implements Container<t> { ... }</t></t>,复用性更强 - JDK 中典型例子:Comparable
、Iterator 、Function
类型参数的约束与规范
不是所有类型都能无条件传入,有时需要限定范围,保证方法内能安全调用某些操作。
- 用 extends 限定上界:如
<t extends number></t>表示 T 只能是 Number 或其子类(Integer、Double 等),这样就能调用doubleValue() - 多个边界用 & 连接:
<t extends comparable> & Serializable></t> - 避免使用原始类型:不要写
List list,而要用List<string></string>,否则失去泛型保护 - 注意类型擦除:运行时泛型信息不存在,所以不能用
if (obj instanceof List<string>)</string>判断,只能写if (obj instanceof List)
泛型与集合框架的实际配合
Java 集合类本身就是泛型的最佳实践范例,直接参考它们的用法最直观。
- 声明时指定类型:
Map<string integer> wordCount = new HashMap();</string> - 添加元素受约束:
wordCount.put("hello", 5);合法;wordCount.put(123, "oops")编译失败 - 取值无需转换:
Integer count = wordCount.get("hello");类型明确,安全可靠 - 遍历时类型确定:
for (Map.Entry<string integer> entry : wordCount.entrySet()) { ... }</string>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










