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

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

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

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

输入一个参数数组,需要根据这个参数数组中的参数,来遍历执行对应的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));//执行对应方法
   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值