JDK7为间接调用方法引入新的API - MethodHandle,可以看作反射的升级版。
MethodHandle是什么?简单的说就是方法句柄,通过这个句柄可以调用相应的方法
用MethodHandle调用方法的流程为:
- 创建MethodType,获取指定方法的签名
- 在Lookup中查找MethodType的方法句柄MethodHandle
- 传入方法参数通过MethodHandle调用方法
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType;
public class MethodHandlerTest { public static void main(String[] args) throws Throwable { MethodHandles.Lookup lookup = MethodHandles.lookup(); MethodType mt = MethodType.methodType(String.class,char.class,char.class); try { MethodHandle mh = lookup.findVirtual(String.class,"replace", mt); String handled_str = (String) mh.invoke("abc",'a','c'); System.out.print(handled_str); } catch (NoSuchMethodException | IllegalAccessException e) { e.printStackTrace(); } } }
|
输出结果:cbc
参考链接:
https://www.cnblogs.com/Mrfanl/p/10544251.html
https://www.cnblogs.com/zhangxh20/p/7086622.html
https://www.zhihu.com/question/40427344/answer/252825611