从lambda对象获取MethodHandle

时间:2017-05-19 16:26:51

标签: java reflection lambda jvm-bytecode

来自java.lang.invoke.LambdaMetafactory

  

评估lambda表达式的推荐机制是将lambda体去除方法,调用invokedynamic调用站点,其静态参数列表描述功能接口的唯一方法和desugared实现方法,并返回一个对象(lambda)实现目标类型的对象。

从检查来看,这至少是Oracle JDK的作用。

我的问题:给定一个lambda对象有没有办法找到实现方法的名称(或句柄)?或者,给定一个实现方法列表,有没有办法告诉哪一个对应于给定的lambda对象?

1 个答案:

答案 0 :(得分:1)

您可以访问lambda类的ConstantPool(即使用sun.misc.SharedSecrets.getJavaLangAccess().getConstantPool(class)),然后搜索方法引用。您必须忽略对象构造函数以及autoboxing / unboxing方法引用,其余的方法引用是实现方法。