Java泛型类通过类型参数(如<T>)实现类型安全和代码复用,支持多类型参数、继承泛型、通配符边界限制,编译期检查并在运行时擦除类型信息。

Java泛型类允许在定义类时使用类型参数,使类可以适用于多种数据类型,同时在编译期提供类型安全检查。使用泛型类可以避免强制类型转换,提升代码的可重用性和健壮性。
泛型类的基本语法
定义一个泛型类时,在类名后加上尖括号 <T>,其中 T 是类型参数(Type Parameter),代表未知类型。你也可以使用其他字母如 <E>、<K>、<V> 等,但通常:
- <T> 表示 Type
- <E> 表示 Element(常用于集合)
- <K> 表示 Key,<V> 表示 Value(常用于 Map)
示例:定义一个简单的泛型类
class Box<T> { private T value; public void setValue(T value) { this.value = value; } public T getValue() { return value; } }使用这个泛型类时,指定具体的类型:
立即学习“Java免费学习笔记(深入)”;
Box<String> stringBox = new Box<>(); stringBox.setValue("Hello"); String content = stringBox.getValue(); // 无需强转多个类型参数
一个泛型类可以有多个类型参数,用逗号分隔。
class Pair<T, U> { private T first; private U second; public Pair(T first, U second) { this.first = first; this.second = second; } public T getFirst() { return first; } public U getSecond() { return second; } }使用方式:
Pair<String, Integer> pair = new Pair<>("age", 25); String key = pair.getFirst(); Integer val = pair.getSecond();泛型类的继承与实现
泛型类可以被继承,子类可以选择保留泛型或指定具体类型。
- 继承时继续使用泛型: class SpecialBox<T> extends Box<T> { }
- 继承时固定类型: class StringBox extends Box<String> { }
实现泛型接口也类似:
interface Container<T> { void add(T item); T get(); } class MyContainer<T> implements Container<T> { private T item; public void add(T item) { this.item = item; } public T get() { return item; } }类型通配符与边界限制
在使用泛型类时,可以使用通配符 <?> 表示未知类型,还可通过 extends 或 super 设置边界。
- 上界通配符:Box<? extends Number> —— 接受 Number 及其子类,如 Integer、Double
- 下界通配符:Box<? super Integer> —— 接受 Integer 及其父类,如 Number、Object
示例方法接收特定范围的泛型类:
void process(Box<? extends Number> box) { Number num = box.getValue(); System.out.println(num.doubleValue()); }基本上就这些。掌握泛型类的定义和使用,能写出更灵活、安全的 Java 代码。注意类型擦除是 Java 泛型的底层机制,运行时泛型信息会被擦除,仅用于编译期检查。不复杂但容易忽略。











