1. Java泛型概述

Java泛型(Generics)是在JDK 5.0引入的一项特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。

2. 泛型的优点

  • 类型安全:泛型的主要目标是提高Java程序的类型安全。通过使用泛型,编译器可以在编译时检查类型错误,避免在运行时出现ClassCastException
  • 消除强制类型转换:使用泛型时,不需要进行显式的类型转换,代码更加简洁。
  • 代码复用:泛型允许编写通用的代码,这些代码可以处理不同类型的数据,提高了代码的复用性。

3. 泛型类的定义和使用

定义泛型类

泛型类的定义是在类名后面加上<T>,其中T是类型参数,可以是任意标识符,通常使用大写字母。

// 定义一个泛型类
class Box<T> {
    private T item;

    public void setItem(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }
}

使用泛型类

在创建泛型类的实例时,需要指定具体的类型参数。

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

        // 创建一个存储String类型的Box对象
        Box<String> stringBox = new Box<>();
        stringBox.setItem("Hello, World!");
        String str = stringBox.getItem();
        System.out.println("String value: " + str);
    }
}

4. 泛型方法的定义和使用

定义泛型方法

泛型方法可以定义在普通类或泛型类中,它的定义是在返回类型前加上<T>

class GenericMethodExample {
    // 定义一个泛型方法
    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.print(element + " ");
        }
        System.out.println();
    }
}

使用泛型方法

调用泛型方法时,编译器会根据传入的参数类型自动推断类型参数。

public class GenericMethodTest {
    public static void main(String[] args) {
        // 创建一个Integer数组
        Integer[] intArray = {1, 2, 3, 4, 5};
        // 调用泛型方法打印Integer数组
        GenericMethodExample.printArray(intArray);

        // 创建一个String数组
        String[] stringArray = {"Hello", "World", "Java"};
        // 调用泛型方法打印String数组
        GenericMethodExample.printArray(stringArray);
    }
}

总结

通过上述代码示例,我们可以看到泛型类和泛型方法的定义和使用方式。泛型提供了类型安全和代码复用的优点,使得Java代码更加健壮和易于维护。