Java 泛型(Generics)是 Java 5 引入的重要特性,允许在类、接口和方法中使用类型参数,从而实现更灵活、安全的代码。以下是核心内容:


1. 泛型的基本概念

泛型通过参数化类型实现类型安全,避免强制类型转换。例如:

List<String> list = new ArrayList<String>();
  • String 是类型参数,确保列表只存储字符串。
  • 泛型在编译时检查类型,运行时无类型信息(类型擦除)。

2. 泛型类与接口

定义泛型类:

public class Box<T> {
    private T item;
    public void setItem(T item) { this.item = item; }
    public T getItem() { return item; }
}

使用示例:

Box<Integer> intBox = new Box<>();
intBox.setItem(100);
System.out.println(intBox.getItem()); // 输出 100

定义泛型接口:

public interface Container<T> {
    T get();
    void set(T item);
}

3. 泛型方法

泛型方法可以定义在普通类中,无需泛型类:

public class Utility {
    public static <T> T findMax(T a, T b) {
        return a.compareTo(b) > 0 ? a : b;
    }
}

使用示例:

String max = Utility.findMax("apple", "banana");
System.out.println(max); // 输出 banana

4. 通配符与类型边界

  • 通配符 ? 用于表示未知类型:
    void printList(List<? extends Number> list) {
        for (Number num : list) {
            System.out.println(num);
        }
    }
    
  • 类型边界(Bounded Types)限制泛型类型范围:
    public class Box<T extends Comparable<T>> {
        // 实现比较逻辑
    }
    

5. 泛型的实际应用

  • 集合框架(如 List<T>Map<K,V>):确保数据类型一致性。
  • 自定义数据结构:如链表、队列等。
  • 减少类型转换:避免 ClassCastException

扩展阅读


Java_Generics