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

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

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

代码

class SortClass<T extends Comparable>{
//选择排序
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));
}

}

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

阅读 3k
1 个回答

在invoke方法那,把a强转为object
要不然数组会被解析成一个个参数,而不是一整个数组作为参数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题