一、引言
在 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