Java 泛型

发布于:2025-03-22 ⋅ 阅读:(14) ⋅ 点赞:(0)

一、引言

在 Java 编程中,泛型是一项强大的特性,它允许在类、接口和方法的定义中使用类型参数。泛型提供了类型安全的集合,避免了在运行时进行类型转换的风险,提高了代码的可读性和可维护性。

二、泛型的基本概念

2.1 泛型的定义

泛型,即“参数化类型”,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

2.2 泛型的好处

  • 类型安全:泛型在编译时进行类型检查,确保集合中只能存储指定类型的元素,避免了在运行时出现 ClassCastException 异常。
  • 消除强制类型转换:使用泛型后,不需要在代码中进行显式的类型转换,代码更加简洁易读。
  • 代码复用:通过泛型可以编写通用的代码,适用于不同类型的数据,提高了代码的复用性。

三、泛型类

3.1 泛型类的定义

泛型类是指在类的定义中使用了类型参数的类。其基本语法如下:

class 类名<类型参数列表> {
   
    // 类的成员变量和方法
}

以下是一个简单的泛型类示例:

// 定义一个泛型类 Box,用于存储任意类型的数据
class Box<T> {
   
    private T data;

    public Box(T data) {
   
        this.data = data;
    }

    public T getData() {
   
        return data;
    }

    public void setData(T data) {
   
        this.data = data;
    }
}

在上述代码中,Box 类是一个泛型类,<T> 是类型参数,它可以代表任意类型。data 成员变量的类型是 T,表示可以存储任意类型的数据。

3.2 泛型类的使用

使用泛型类时,需要在创建对象时指定具体的类型参数。例如:

public class GenericClassExample {
   
    public static void main(String[] args) {
   
        // 创建一个存储 Integer 类型的 Box 对象
        Box<Integer> integerBox = new Box<>(10);
        Integer integerData = integerBox.getData();
        System.out.println("Integer Box 中的数据: " + integerData);

        // 创建一个存储 String 类型的 Box 对象
        Box<String> stringBox = new Box<>("Hello");
        String stringData = stringBox.getData();
        System.out.println("String Box 中的数据: " + stringData);
    }
}

在这个例子中,我们分别创建了存储 Integer 类型和 String 类型的 Box 对象,并通过 getData 方法获取存储的数据。

3.3 多个类型参数的泛型类

泛型类可以有多个类型参数。例如:

// 定义一个泛型类 Pair,用于存储两个不同类型的数据
class Pair<K, V> {
   
    private K key;
    private V value;

    public Pair(K key, V value) {
   
        this.key = key;
        this.value = value;
    }

    public K getKey() {
   
        return key;
    }

    public V getValue() {
   
        return value;
    }
}

使用示例:

public class MultipleTypeParamsExample {
   
    public static void main(String[] args) {
   
        Pair<String, Integer> pair = new Pair<>("Age", 25);
        String key = pair.getKey();
        Integer value = pair.getValue