栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Lambda表达式与方法参考实现细节

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Lambda表达式与方法参考实现细节

这是Brett Oken链接的Brian
Goetz的文档
的摘录:

当编译器遇到lambda表达式时,它首先将lambda主体降低(降低)到方法中
其参数列表和返回类型与lambda表达式的参数匹配,并可能带有一些其他参数(用于从词法范围捕获的值(如果有)。)在将捕获lambda表达式的点上,它会生成一个invokedynamic调用站点,调用时,该函数返回lambda转换为的功能接口的实例。此调用站点称为给定lambda的lambda工厂。lambda工厂的动态参数是从词法范围捕获的值。lambda工厂的bootstrap方法是Java语言运行时库中的一种标准化方法,称为lambda元工厂。静态引导程序参数捕获在编译时有关lambda的已知信息(将其转换为功能接口,

方法引用与lambda表达式的处理方式相同,不同之处在于,大多数方法引用不需要分解为新方法
;我们可以简单地为引用的方法加载一个常量方法句柄,并将其传递给元工厂。

从同一文档中提取的示例:

例如,考虑一个捕获字段minSize的lambda:

list.filter(e -> e.getSize() < minSize )

我们将其作为实例方法进行解糖,并将接收器作为第一个捕获的参数传递:

list.forEach(INDY((MH(metaFactory), MH(invokeVirtual Predicate.apply),         MH(invokeVirtual B.lambda$1))( this ))));private boolean lambda$1(Element e) {    return e.getSize() < minSize; }

list.filter(String::isEmpty)

被翻译为:

list.filter(indy(MH(metaFactory), MH(invokeVirtual Predicate.apply),  MH(invokeVirtual String.isEmpty))()))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454668.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号