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

声纳:将此lambda替换为方法参考

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

声纳:将此lambda替换为方法参考

您不能在

input ->getValueProvider().apply(input).getValue()
不更改语义的情况下用方法引用替换lambda 。

方法引用替换 单个 方法调用,因此它不能简单地替换包含多个方法调用的lambda表达式。

形式的lambda表达式

input ->getValueProvider().apply(input)
可以被替换为,
getValueProvider()::apply
当且仅当的评估时间
getValueProvider()
无关紧要,因为在lambda形式中,在每个lambda主体评估中都调用该方法,而对于方法引用,仅调用一次,并且结果被抓

这类似于之间的区别

x ->System.out.println(x)
,并
System.out::println
在那里读字段的内容
System.out
在不同的时间发生,但通常并不重要。但是您应该意识到区别。

在您的示例中,

getValue()
调用了第三个方法。用方法引用来表示的唯一方法是需要一个功能接口,例如like
Function
,它具有诸如
andThen
and / or 这样的方法
compose
。但是,Java
8的工作方式要求将第一个方法引用转换为目标接口以调用合并方法,而这将很难理解您现在拥有的lambda表达式:类型
((Function<X,Y>)getValueProvider()::apply).andThen(Y::getValue)
在哪里
Y
apply(input)
返回。

请注意,该规则说“ 在可能的情况下 用方法引用替换lambda ”,这使您有空间说“嗯,在这里是不可能的”,但是,我不确定您可以称其为“规则”多少……



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

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

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