为了账号安全,请及时绑定邮箱和手机立即绑定

为什么返回类型的Java方法引用与Consumer接口匹配?

为什么返回类型的Java方法引用与Consumer接口匹配?

茅侃侃 2019-07-31 10:06:49
为什么返回类型的Java方法引用与Consumer接口匹配?我对以下代码感到困惑class LambdaTest {     public static void main(String[] args) {         Consumer<String>         lambda1 = s -> {};         Function<String, String> lambda2 = s -> s;         Consumer<String>         lambda3 = LambdaTest::consume; // but s -> s doesn't work!         Function<String, String> lambda4 = LambdaTest::consume;     }     static String consume(String s) { return s;}}我原本期望lambda3的赋值失败,因为我的consume方法与Consumer Interface中的accept方法不匹配 - 返回类型不同,String与void。此外,我一直认为Lambda表达式和方法引用之间存在一对一的关系,但显然并非如我的示例所示。有人可以向我解释这里发生了什么吗?
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

consume(String)方法匹配Consumer<String>接口,因为它消耗了一个String- 它返回一个值是无关紧要的事实,因为 - 在这种情况下 - 它被简单地忽略。(因为Consumer接口根本不期望任何返回值)。

它必须是一个设计选择,基本上是一个实用程序:想象有多少方法需要重构或重复以匹配功能接口的需求,Consumer甚至是非常常见的功能接口Runnable。(请注意,您可以将任何不使用参数的方法传递RunnableExecutor,例如。)

甚至像java.util.List#add(Object)返回值的方法:boolean。由于它们返回某些东西(在许多情况下几乎不相关)而无法传递此类方法引用会相当烦人。


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 781 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信