Java泛型类通过类型参数(如)实现类型安全和代码复用,支持多类型参数、继承泛型、通配符边界限制,编译期检查并在运行时擦除类型信息。
Java泛型类允许在定义类时使用类型参数,使类可以适用于多种数据类型,同时在编译期提供类型安全检查。使用泛型类可以避免强制类型转换,提升代码的可重用性和健壮性。
泛型类的基本语法
定义一个泛型类时,在类名后加上尖括号 ,其中 T 是类型参数(Type Parameter),代表未知类型。你也可以使用其他字母如 、、 等,但通常:
-
表示 Type
-
表示 Element(常用于集合)
-
表示 Key, 表示 Value(常用于 Map)
示例:定义一个简单的泛型类
class Box {
private T value;
public void setValue(T value) {
th
is.value = value;
}
public T getValue() {
return value;
}
}
使用这个泛型类时,指定具体的类型:
Box stringBox = new Box();
stringBox.setValue("Hello");
String content = stringBox.getValue(); // 无需强转
多个类型参数
一个泛型类可以有多个类型参数,用逗号分隔。
class Pair {
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 pair = new Pair("age", 25);
String key = pair.getFirst();
Integer val = pair.getSecond();
泛型类的继承与实现
泛型类可以被继承,子类可以选择保留泛型或指定具体类型。
- 继承时继续使用泛型:
class SpecialBox extends Box { }
- 继承时固定类型:
class StringBox extends Box { }
实现泛型接口也类似:
interface Container {
void add(T item);
T get();
}
class MyContainer implements Container {
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 泛型的底层机制,运行时泛型信息会被擦除,仅用于编译期检查。不复杂但容易忽略。