来自java.lang.invoke.LambdaMetafactory
:
评估lambda表达式的推荐机制是将lambda体去除方法,调用invokedynamic调用站点,其静态参数列表描述功能接口的唯一方法和desugared实现方法,并返回一个对象(lambda)实现目标类型的对象。
从检查来看,这至少是Oracle JDK的作用。
我的问题:给定一个lambda对象有没有办法找到实现方法的名称(或句柄)?或者,给定一个实现方法列表,有没有办法告诉哪一个对应于给定的lambda对象?
答案 0 :(得分:1)
您可以访问lambda类的ConstantPool(即使用sun.misc.SharedSecrets.getJavaLangAccess().getConstantPool(class)
),然后搜索方法引用。您必须忽略对象构造函数以及autoboxing / unboxing方法引用,其余的方法引用是实现方法。