1

来自java.lang.invoke.LambdaMetafactory

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

从检查来看,这至少是 Oracle JDK 所做的。

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

4

1 回答 1

2

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

于 2017-05-19T17:22:49.327 回答