MethodHandler

Java是一个支持反射的语言,从诞生的那一刻起就已经支持了反射。经典的反射代码可以这样写:

8d5470f224350ef33b3ced0324f332a9a09.jpg

  • 可以利用反射在运行时通过名字查找方法句柄,动态调用想要的方法。同时,上面的例子中也可以发现,通过Method反射调用是支持多态的

但是从Java7开始,JDK中又多了一个功能类似的成员,java.lang.invoke.MethodHandle。先来看看MethodHandle又是怎么用的:

848cb636de102ba3f2e8e1ed115f05211f8.jpg

  • MethodHandle反射调用也是支持多态的,并且和Method不同的是,MethodHandle的成员方法要线bindTo到某个instance,bind过程中已经做了类型检查
  • Method成员方法左值是和函数参数一起传入的

综上,MethodHandle更像是在Java语法规则内手写字节码:自己创建方法签名(MethodType),自己决定调用方式(invokestatic/invokespecial/invokevirtual),自己注意访问控制(public/package/protected/private),最后还要自己决定类型隐式转换;而Method权限则大得多。虽然MethodHandle能力相对受限,不过性能确高了很多(两者的实现对比解析待续…)。

转载于:https://my.oschina.net/u/3847203/blog/2221569

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值