来自java.lang.invoke.LambdaMetafactory
:
评估 lambda 表达式的推荐机制是将 lambda 体脱糖到一个方法,调用一个 invokedynamic 调用站点,其静态参数列表描述了函数接口的唯一方法和脱糖的实现方法,并返回一个对象(lambda 对象)实现目标类型。
从检查来看,这至少是 Oracle JDK 所做的。
我的问题:给定一个 lambda 对象,有没有办法找到实现方法的名称(或句柄)?或者,给定一个实现方法列表,有没有办法判断哪个对应于给定的 lambda 对象?
您可以访问 lambda 类的 ConstantPool(即通过使用sun.misc.SharedSecrets.getJavaLangAccess().getConstantPool(class)
),然后搜索方法引用。您必须忽略对象构造函数以及自动装箱/拆箱方法引用,剩下的方法引用是实现方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句