Java泛型的基本概念泛型是Java SE 5.0引入的特性允许在定义类、接口或方法时使用类型参数。泛型的核心目的是提高代码的类型安全性和复用性避免强制类型转换。泛型的优势类型安全编译时检查类型减少运行时错误。 代码复用一套逻辑可适用于多种数据类型。 消除强制类型转换减少代码冗余和潜在错误。泛型类和接口定义泛型类时在类名后添加类型参数声明public class BoxT { private T t; public void set(T t) { this.t t; } public T get() { return t; } }接口定义方式类似public interface ListT { void add(T element); T get(int index); }泛型方法泛型方法可以在非泛型类中定义方法声明中包含类型参数public T T genericMethod(T param) { return param; }静态方法也可以使用泛型public static T T staticGenericMethod(T param) { return param; }类型通配符使用?表示未知类型常用于方法参数public void processList(List? list) { for (Object elem : list) { System.out.println(elem); } }上界通配符限制类型范围public void processNumbers(List? extends Number list) { for (Number num : list) { System.out.println(num.doubleValue()); } }下界通配符public void addNumbers(List? super Integer list) { list.add(new Integer(42)); }泛型限制不能创建泛型数组// 编译错误 ListString[] arrayOfLists new ListString[10];不能实例化类型参数// 编译错误 T obj new T();不能用于静态上下文public class GenericClassT { // 编译错误 private static T staticField; }类型擦除Java泛型在编译时进行类型检查运行时擦除类型信息。编译后的代码不包含泛型类型参数所有类型参数替换为它们的上界未指定上界则替换为Object。实际应用示例集合框架中的泛型ListString strings new ArrayList(); strings.add(Hello); String s strings.get(0); // 无需强制类型转换比较接口中的泛型public interface ComparableT { int compareTo(T o); }最佳实践尽量使用泛型替代原始类型。 优先使用通配符增加API灵活性。 避免在类声明和静态上下文中混用泛型。 注意类型擦除带来的潜在问题。