从lambda对象获取MethodHandle

来自java.lang.invoke.LambdaMetafactory

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

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

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

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