通过反射获取方法以及执行

上篇说到了通过反射能够获取属性,使用 Field 对象,本篇简单说一下,通过反射如何获取方法以及调用方法:

想要获取方法,首先创建一个 Method 对象,有 getMethods 和 getMethod,同属性,getMethods 和 getDeclaredMethods 一个是拿到所有方法,一个是拿到本类(声明的)
在这里插入图片描述
输出结果对比:
getMethods:通过拿到了从父类 Object 里面继承的方法
在这里插入图片描述
getDeclaredMethods:只能获取到当前类定义的方法
在这里插入图片描述
获取到方法集合以后,说一下获取单个方法:

getMethod() 经过重载,如果不需要传递参数,例如 getter 方法,那么直接传递方法的 String 字符串即可

如果需要传递参数,比如 setter 方法,那么在后面需要传递参数的类,需要注意的是: 这里没有包装类的自动转换,必须对应,Integer.class 不能写成 int.class,反之亦然

在这里插入图片描述

已经拿到指定方法,现在开始执行方法:

使用 invoke 函数,执行方法,需要传递两个对象,第一个是需要执行方法的对象(这里是 student,第二个是需要传递的参数(如果没参数,直接传 null 即可)

在这里插入图片描述

此时会出现一些问题:如果是私有方法(private 修饰的)那么就会报错,如图:

在这里插入图片描述
因为此时是 getMethod,拿不到 私有的方法,需要使用 getDeclaredMethod 拿到已经声明的方法。
但是发现还是会报错

在这里插入图片描述
这是因为没有设置权限访问,需要使用如下语句:

setAccessible,将参数修改为 true

在这里插入图片描述
此时方法执行成功,总结:公共方法直接使用 getMethod 获取 invoke 执行,如果是 私有的方法 需要用 getDeclaredMethod 再设置 setAccessible 修改为 true 即可实行,此时完成反射的方法部分

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_努力努力再努力_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值