首页 > 解决方案 > Java:使用 lambda 而不将其分配给变量

问题描述

我正在使用这样的 lambda:

TwoValueCommand addition = (a, b) -> a + b;
return pushTwoValueCommand(addition);

有没有办法我可以这样写:

return pushTwoValueCommand(TwoValueCommand (a, b) -> a + b);

无需创建变量?

编辑

这些问题的答案:

如何使用 lambda 初始化字段

将 Java lambda 的结果分配给字段

为我指明了正确的方向,但它们的措辞不同,我还是想发布这个。

标签: javalambda

解决方案


How to initialize field using lambda我确定我可以这样做:

return pushTwoValueCommand((TwoValueCommand) (a, b) -> a + b); // put parentheses around type to cast lambda expression

从@ernest_k 我看到我也可以这样做:

return pushTwoValueCommand((a, b) -> a + b);

(虽然我不明白那个版本是如何工作的——我不是必须使用功能接口吗??https://medium.freecodecamp.org/learn-these-4-things-and-working-with-lambda-表达式-b0ab36e0fffc )

编辑

@AndrewTobilko 的回答很好地解释了为什么你可以这样做(没有演员表)。类型可以从 pushTwoValueCommand 的方法定义中推断出来,只要 pushTwoValueCommand 没有以编译器无法确定使用哪个函数接口的方式重载(pushTwoValueCommand 的多个定义)。


推荐阅读