Presentations
Templates
Features
Teams
Pricing
Log in
Sign up
Log in
Sign up
Menu
聊聊 Java 7 中的 MethodHandle
invokevirtual——对实例方法的标准分派
invokestatic——用于分派静态方法
invokeinterface——用于通过接口进行方法调用的分派
invokespecial——当需要进行非虚(也就是“精确”)分派时会用到
聊聊 Java 7 中的 MethodHandle
和反射的区别
反射是代码层次的方法调用,而MethodHandle是字节码层次的方法调用
Method 比 MethodHandle 包含的信息多
MethodHandle可以进行内联优化,反射完全没有。
反射是重量级,而MethodHandle是轻量级。
MethodHandle服务于所有java虚拟机上的语言,反射仅服务于java语言。
聊聊 Java 7 中的 MethodHandle
MethodHandle
它是可对直接执行的方法(构造方法等)的类型的引用。
方法名
签名--参数列表和返回值
定义方法的类
方法体(代码)
聊聊 Java 7 中的 MethodHandle
MethodHandle / MethodType
它是表示方法签名类型的不可变对象。
每个方法句柄都有一个MethodType实例,用来指明方法的返回类型和参数类型。
它完全由参数类型和方法返回类型来确定,而与它所引用的底层的方法的名称和所在的类没有关系。
聊聊 Java 7 中的 MethodHandle
invoke 和 invokeExact
如果需要的话,原始类型会进行装箱操作
如果需要的话,装箱后的原始类型会进行拆箱操作
如果必要的话,原始类型会进行扩展
void返回类型会转换为0(对于返回原始类型的情况),而对于预期得到引用类型的返回值的地方,将会转换为null
null值会被视为正确的,不管静态类型是什么都可以进行传递
聊聊 Java 7 中的 MethodHandle 黑魔法
By biezhi
Made with Slides.com
聊聊 Java 7 中的 MethodHandle 黑魔法
684
biezhi
More from
biezhi