Java通过方法名称使用方法——反射的应用

    技术2022-07-12  74

    今天在写修改接口的时候忽然遇到这样一个问题:

    需要根据输入的修改对象及参数数组,记录需要修改属性的被修改前的值以及修改值。

    在实现的过程中,遇到的核心问题规约为:

    输入一个参数数组,需要根据这个参数数组中的参数,来遍历执行对应的get方法。

    比如输入中有name,那么我需要执行getName();

    似乎有点不好实现,甚至有点不现实,毕竟我们不能在代码中写诸如get+‘Name’+();这么不现实的东西啊。

     

    开玩笑开玩笑。


    那么如何通过输入参数调用对应的方法呢?

    伟大的java先驱者已经为我们想到了,我们可以利用java反射这个特性来实现。

    回过头来想,第一次在看反射的时候一脸懵内心总是在想:这玩意儿有啥用啊。

    话不多说直接上代码

    //activity即需要修改属性对象的bean Class<?> clazz = activity.getClass();//获取对应方法所属对象类 //params为传入的的参数数组,此处获取一个需要修改的参数 String param=params.get(i); String str=param.substring(0, 1).toUpperCase() + param.substring(1); try { Method getMethod = clazz.getDeclaredMethod("get"+str);//通过String获取方法 //利用changeLog对象记录修改前和修改后的值 changeLog.setPreValue((String) getMethod.invoke(oldActivity));//执行对应方法 changeLog.setAfterValue((String) getMethod.invoke(activity)); }catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }

    大功告成

    其中关键步骤为

    Class<?> clazz = activity.getClass();//获取对应方法所属对象类 Method getMethod = clazz.getDeclaredMethod("get"+str);//通过String获取方法 getMethod.invoke(activity));//执行对应方法

     

    Processed: 0.020, SQL: 9