Java中可用泛型方法实现类型安全的数组交换工具,定义为public static <T> void swap(T[] arr, int i, int j),需校验数组非空及索引合法,并用临时变量完成交换;但仅支持引用类型数组,基本类型需重载。

Java 中可以用泛型方法实现一个类型安全、复用性强的数组元素交换工具函数,核心是使用 <T> 声明类型参数,并确保数组和索引合法。
泛型方法定义与基本结构
泛型方法独立于类的类型参数,需在返回类型前显式声明类型变量。交换两个位置的元素,需校验数组非空、索引不越界:
- 方法签名应为
public static <T> void swap(T[] arr, int i, int j) - 必须检查
arr != null、i和j在[0, arr.length)范围内 - 交换逻辑只需三行:临时变量保存、赋值、还原
完整可运行示例
以下是一个健壮的泛型交换方法(含异常提示):
public class ArrayUtils {
public static <T> void swap(T[] arr, int i, int j) {
if (arr == null) {
throw new IllegalArgumentException("Array must not be null");
}
if (i < 0 || i >= arr.length || j < 0 || j >= arr.length) {
throw new IndexOutOfBoundsException("Index out of bounds: " + i + ", " + j);
}
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
调用方式自然简洁:
立即学习“Java免费学习笔记(深入)”;
String[] strs = {"a", "b", "c"};
ArrayUtils.swap(strs, 0, 2); // → {"c", "b", "a"}
Integer[] nums = {10, 20, 30};
ArrayUtils.swap(nums, 1, 2); // → {10, 30, 20}
注意事项与限制
该方法仅适用于引用类型数组(T[]),不能直接用于基本类型(如 int[]):
- Java 泛型擦除后,
T[]实际是Object[],而int[]是原生类型,无法匹配 - 若需支持基本类型,需单独重载方法(如
swap(int[], int, int)),或使用包装类(Integer[]等) - 数组必须是同一类型,不能混用子类父类数组(如
Number[]存Integer和Double时仍可交换,但类型安全由调用方保证)
进阶:支持任意类型数组(含基本类型封装)
如果希望统一接口,可借助 java.util.Arrays 的 asList + Collections.swap,但注意它只适用于对象数组且返回新列表,不修改原数组。真正原地交换基本类型,仍推荐重载:
public static void swap(int[] arr, int i, int j) {
if (arr == null || i < 0 || i >= arr.length || j < 0 || j >= arr.length) {
throw new IllegalArgumentException("Invalid index");
}
int t = arr[i]; arr[i] = arr[j]; arr[j] = t;
}
这样既保持类型安全,又覆盖常用场景。


















