java invoke 泛型_如何通过java反射调用含有泛型数组参数的方法

在尝试使用Java反射和泛型动态测试SortClass的排序方法时,遇到参数异常问题。SortClass包含选择排序和交换函数,以及一个测试用时函数,该函数试图通过反射调用sortName方法并传入Object[]数组。然而,实际调用过程中出现异常。寻求改进代码或解决方案。
摘要由CSDN通过智能技术生成

最近在看一个算法课程,老师用的是c++的template和函数指针来完成一个实现,于是我想用java通过反射和泛型来完成,但是出现了问题。

希望通过java反射以及泛型来实现动态测试SortClass中的各种排序函数,这时getmethod方法和invoke方法的参数不知道如何解决了。我写的这个实现一直报参数异常

代码

class SortClass{

//选择排序

public void selectSort(T[] a){

for(int i = 0; i < a.length; i++){

int min = i;

for(int j = i+1; j < a.length; j++){

if(a[j].compareTo(a[min]) < 1){

swap(a,j,min);

}

}

}

}

//交换函数

public void swap(T[] arr, int a, int b){

T temp = arr[a];

arr[a] = arr[b];

arr[b] = temp;

}

//测试用时函数

public void testSort(String sortName,Object[] a){

long startTime = System.currentTimeMillis();

try {

Method method = this.getClass().getMethod(sortName,Object[].class);

method.invoke(this,a);

} catch (NoSuchMethodException e) {

System.out.println(e.getMessage()+" not find");

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

long endTime = System.currentTimeMillis();

System.out.println(sortName + "use time:" + (endTime-startTime));

}

}

希望能有一些改进的方法或者代码来完成这个实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值