如何用反射获取范型方法

如何用反射获取范型方法

我的大至思路是这样的,但是这样显示

java.lang.NoSuchMethodException: SelectionSort.SelectionSort.sort([Ljava.lang.Integer;

这个错误

Class className=Class.forName(sortName);
Method method=className.getMethod("sort",arr.getClass());


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

如果使用课程中的接口,靠字符串来调用相应的类函数,我的实现:

public static <E extends Comparable<E>> void sortTest(String sortname, E[] arr){
    
    try{
        Class sortClass = Class.forName(sortname);
        Method sortMethod = sortClass.getMethod("sort", Comparable[].class);
        Object[] params = new Object[]{arr};
        
        long startTime = System.nanoTime();
        sortMethod.invoke(null, params);
        long endTime = System.nanoTime();
        
        double time = (endTime - startTime) / 1000000000.0;
        if(!SortingHelper.isSorted(arr))
            throw new RuntimeException(sortname + " failed");
        System.out.println(String.format("%s , n = %d : %f s", sortname, arr.length, time));
    }
    catch (Exception e){
        System.out.println(e.getMessage());
        e.printStackTrace();
        System.out.println("Error in SortingHelper.sortTest!");
    }
}


继续加油!:)

  • ComparablesortTestClass?clazz, arr, String sortMethodName, ascIllegalAccessException, NoSuchMethodException, InvocationTargetException Method method = clazz.getMethodsortMethodName, Comparable.;
    
        startTime = System.;
        method.invoke, Objectarr;
        endTime = System.;
    
        !SortingHelper.arr, ascRuntimeExceptionclazz.getSimpleName+ ;
        System..printf,
                clazz.getSimpleName, sortMethodName, arr., endTime - startTime/;


    2023-10-11 16:47:01
  • public static <E extends Comparable<E>> void sortTest(Class<?> clazz, E[] arr, String sortMethodName, boolean asc)
            throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        Method method = clazz.getMethod(sortMethodName, Comparable[].class);
    
        // sort arr
        long startTime = System.nanoTime();
        method.invoke(null, (Object) arr);
        long endTime = System.nanoTime();
    
        // validate sorted
        if (!SortingHelper.isSorted(arr, asc)) {
            throw new RuntimeException(clazz.getSimpleName() + " failed!");
        }
    
        System.out.printf("%s %s with n = %d, cost: %f\n",
                clazz.getSimpleName(), sortMethodName, arr.length, (endTime - startTime)/1e9);
    }


    2023-10-11 16:47:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师