java MethodHandle解析
来源:互联网 发布:mac安装软件 编辑:程序博客网 时间:2024/06/15 02:01
MethodHandle对应的就是一个方法的句柄,有些类似于java反射中的Method方法
1、那么如何获取到一个方法的MethodHandle句柄呢?
它使用的是MethodHandles.Lookupd对象来获取获取。Lookup包含以下常用方法:
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是该属性的名称,不是方法名称
从上面的方法中给定对应方法的class,方法名以及参数类型来查找某个方法对应的MethodHandle
2、参数类型使用的是MethodType类进行封装,因为参数类型包含返回类型以及形参类型,另外形参可能有多个。
每个方法句柄都有一个MethodType实例,用来指明方法的返回类型和参数类型。
static MethodType methodType(Class<?> rtype, Class<?> ptype0, Class<?>... ptypes)
第一次参数是返回类型,后面的剩余参数是方法的参数类型
3、MethodHandles.Lookup对象的获取使用的是MethodHandle.Lookup()。
4、使用MethodHandle.invoke或者MethodHandle.invokeExact进行方法的调用。
public class MethodHandleTest { public static void main(String[] args) throws Throwable { MethodHandles.Lookup lookup = MethodHandles.lookup(); MethodHandle mh = lookup.findStatic(MethodHandleTest.class, "doubleVal", MethodType.methodType(int.class, int.class)); List<Integer> dataList = Arrays.asList(1, 2, 3, 4, 5); MethodHandleTest.transform(dataList, mh);// 方法做为参数 for (Integer data : dataList) { System.out.println(data);//2,4,6,8,10 } } public static List<Integer> transform(List<Integer> dataList, MethodHandle handle) throws Throwable { for (int i = 0; i < dataList.size(); i++) { dataList.set(i, (Integer) handle.invoke(dataList.get(i)));//invoke } return dataList; } public static int doubleVal(int val) { return val * 2; } }
阅读全文
0 0
- java MethodHandle解析
- java MethodHandle解析
- MethodHandle
- Delegates in JAVA with MethodHandle
- MethodHandle VS Method, Java反射及MethodHandle性能测试
- jdk7之java.lang.invoke.MethodHandle
- java/lang/NoClassDefFoundError: java/lang/invoke/MethodHandle的解决办法
- java methodhandle--反射升级版方法句柄demo
- MethodHandle详解
- java7 MethodHandle学习笔记
- MethodHandle性能测试
- MethodHandle(方法句柄)
- java7 MethodHandle学习笔记
- java7 MethodHandle学习笔记
- MethodHandle与反射Method区别,invokedynamic指令
- Java解析Excel实例解析
- java解析XML和java解析HTML
- java解析XML和java解析HTML
- stm32学习笔记(十二)ADC实验
- Hadoop2.7报It looks like you are making an HTTP request to a Hadoop IPC port. 问题解决
- C语言转义序列,printf双引号内的特殊转义字符
- 面和空间 被割数目问题【知识点】
- 管理线程池处理任务的返回结果的两种方法
- java MethodHandle解析
- mycat的弱事务的理解
- JavaScript 对象的复制,避免使用=(等号),会导致污染原对象
- Kmeans、Kmeans++和KNN算法比较
- MySQL索引资料总结
- java类加载器学习笔记
- Jsp页面传Json数据到服务端,转对象或集合进行数据处理
- 数字逻辑课程设计电子钟
- css 水平/竖直/水平竖直方法大全