Java 泛型深度解析:机制、边界与实战
泛型是 Java 语言中实现类型安全的核心特性。它允许我们在编译期检查类型,避免运行时的 ClassCastException,同时提升代码的可读性和复用性。理解泛型的底层机制——尤其是类型擦除,对于编写健壮的 Java 代码至关重要。
泛型类
基本语法与使用
定义泛型类时,只需在类名后添加类型参数列表(如 <T>)。这些参数可以在类内部作为字段、方法参数或返回类型使用。
class MyArray<T> {
public Object[] array = new Object[10];
public void set(int pos, T val) {
array[pos] = val;
}
public T get(int pos) {
return (T) array[pos];
}
}
实例化时,必须指定具体的类型实参。利用菱形操作符 <> 可以简化代码,让编译器自动推断类型。
public class Test {
public static void main(String[] args) {
MyArray<String> myArray = new MyArray<>();
// 此时 myArray 只能存储 String 类型
}
}
泛型类也可以继承其他类或接口,并只使用部分类型参数。
class ClassName<T1, T2> extends ParentClass<T1> {
// 这里可以使用 T1,但 T2 仅用于特定方法签名
}
泛型上界
有时我们需要对传入的类型变量施加约束,确保它具备某些能力。这通过类型边界(Type Bounds)来实现。
定义与使用
使用 extends 关键字指定上界。这意味着泛型参数必须是该类型或其子类。
class <T > {
}


