泛型是一种编程语言特性,它允许在定义类、接口和方法时使用类型参数,从而使代码更加通用和可重用。泛型类型重写方法是指在方法中使用泛型类型参数,以便该方法可以处理不同类型的数据。
泛型类型参数用尖括号 < >
包围,并且通常用单个大写字母表示,例如 T
、E
、K
、V
等。这些参数可以在方法的返回类型、参数类型以及方法体内部使用。
泛型方法的类型参数可以应用于方法的返回类型和参数类型。常见的泛型类型包括:
T
:表示任意类型。E
:通常用于集合中的元素类型。K
和 V
:通常用于键值对中的键和值类型。泛型方法广泛应用于集合框架、通用算法、工厂模式等场景。例如,在处理集合数据时,泛型方法可以确保集合中的元素类型一致,并且在编译时进行类型检查。
假设我们有一个方法,用于交换数组中的两个元素。使用泛型类型可以使其适用于不同类型的数组。
public class GenericMethodExample {
// 泛型方法,用于交换数组中的两个元素
public static <T> void swap(T[] array, int index1, int index2) {
if (array == null || index1 < 0 || index2 < 0 || index1 >= array.length || index2 >= array.length) {
throw new IllegalArgumentException("Invalid input");
}
T temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
public static void main(String[] args) {
// 示例1:交换整数数组中的元素
Integer[] intArray = {1, 2, 3, 4, 5};
swap(intArray, 1, 3);
System.out.println(Arrays.toString(intArray)); // 输出: [1, 4, 3, 2, 5]
// 示例2:交换字符串数组中的元素
String[] strArray = {"apple", "banana", "cherry"};
swap(strArray, 0, 2);
System.out.println(Arrays.toString(strArray)); // 输出: [cherry, banana, apple]
}
}
Java 中的泛型在编译时会进行类型擦除,这意味着在运行时无法获取泛型类型参数的具体类型。如果需要在运行时获取类型信息,可以使用反射机制。
有时需要对泛型类型参数进行限制,以确保其满足特定条件。可以使用 extends
关键字来指定泛型类型的边界。
public static <T extends Comparable<T>> T max(T[] array) {
if (array == null || array.length == 0) {
throw new IllegalArgumentException("Array is empty");
}
T max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i].compareTo(max) > 0) {
max = array[i];
}
}
return max;
}
在这个例子中,T extends Comparable<T>
确保了传入的数组元素类型实现了 Comparable
接口,从而可以进行比较操作。
泛型方法通过使用类型参数,使代码更加通用和可重用。它在编译时提供类型安全检查,并且可以应用于多种数据类型。通过合理使用泛型边界和反射机制,可以解决类型擦除等常见问题。
领取专属 10元无门槛券
手把手带您无忧上云