JDK7为间接调用方法引入新的API,在java.lang.invoke包下,可以看作为反射的升级版,但它不像反射API那样显得冗长、繁重

主要的类

MethodHandle

  方法句柄、对可直接执行的方法的类型化引用,能够安全调用方法的对象。
MethodHandle 是抽象类,无法直接实例化,需通过MethodHandles.Lookup的工厂方法来创建

MethodType

  每个方法句柄都有一个MethodType实例,用来指明方法的返回类型和参数类型。

  • static MethodType methodType(Class<?> rtype, Class<?> ptype0, Class<?>... ptypes)
    第一次参数是返回类型,后面的剩余参数是方法的参数类型

MethodHandles

  这个类只包含操作或返回方法句柄的静态方法。它们分为以下几类:

  • 查找方法,帮助创建方法和字段的方法句柄。
  • 组合方法,将先前的方法合并或转换成新的方法。
  • 其他工厂方法来创建方法来模拟其他常见的JVM操作或控制流模式

MethodHandles.Lookup

  创建MethodHandle只想的工厂方法查找类

  • MethodHandle findVirtual(Class<?> refc, String name, MethodType type)查找方法名为name的方法
  • MethodHandle findStatic(Class<?> refc, String name, MethodType type)查找静态方法
  • MethodHandle findSetter(Class<?> refc, String name, Class<?> type)查找setter方法,name是该属性的名称,不是方法名称

使用示例

  获取String类的replace方法,并传参调用

MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodType mt = MethodType.methodType(String.class, char.class, char.class);
MethodHandle mh = lookup.findVirtual(String.class, "replace", mt);
String s = (String) mh.invokeExact("daddy",'d','n');

参考资料

  • 《Java程序员修炼之道》
  • Java SE 8 API Documentation

最新文章

  1. CodeFirst时使用T4模板(你肯定没用过的笨方法,还望园友指教)
  2. iOS 限制TextField输入长度(标准)
  3. 在线程中调用SaveFileDialog
  4. 廖雪峰js教程笔记3
  5. BZOJ4426 : [Nwerc2015]Better Productivity最大生产率
  6. varchar类型转换为numeric的值时有问题原因
  7. studio adb连接不上手机 ADB server didn&#39;t ACK
  8. java多线程的使用1
  9. table tr分离并加圆角和阴影
  10. google yeoman
  11. zabbix图中出现中文乱码问题
  12. python之scrapy入门教程
  13. GDI+ 应用,Release没有错误,Debug很多。
  14. IOC容器在web容器中初始化过程——(二)深入理解Listener方式装载IOC容器方式
  15. hue集成hbase出现TSocket read 0 bytes
  16. 《Linux内核设计与分析》第十七章读书笔记
  17. Practice5.1 测试与封装5.1
  18. 不偏移的天地图地图服务-SuperMap版
  19. php 文件压缩
  20. Git Diff 格式分析

热门文章

  1. pgpool-II的master-slave模式的分析
  2. 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码
  3. Centos7使用yum安装MySQL5.6的正确姿势
  4. 视觉SLAM中的深度估计问题
  5. selenium 结合 docker 构建分布式测试环境 (初学者视角)
  6. oracle的分号和斜杠/
  7. 使用Xamarin实现串口通讯
  8. centos7挂载Windows共享文件夹(学习笔记)
  9. Hyperledger Fabric 1.1 -- Policy 构成
  10. 华为云分布式缓存服务DCS与开源服务差异对比