java - Java:使用 lambda 而不将其分配给变量
问题描述
我正在使用这样的 lambda:
TwoValueCommand addition = (a, b) -> a + b;
return pushTwoValueCommand(addition);
有没有办法我可以这样写:
return pushTwoValueCommand(TwoValueCommand (a, b) -> a + b);
无需创建变量?
编辑
这些问题的答案:
为我指明了正确的方向,但它们的措辞不同,我还是想发布这个。
解决方案
从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 的多个定义)。
推荐阅读
- python - 如何将当前时间与使用 django 保存在数据库中的时间进行比较?
- javascript - 用反应原生元素改变主题不起作用?
- sql - 什么是用于查询带有附件记录 ID 的 Blob 的 Active Record DSL?
- join - 使用子查询的 SQLAlchemy ORM 横向连接
- asp.net-core - jenkin管道中如何将上游项目的DLL传递给下游项目
- javascript - 使用 setState 更新助手和事件目标拼接到对象数组仅适用于初始数组索引,而其他所有对象均失败
- mysql - 在 mysql 中按 utf8_vietnamese_ci 排序不起作用
- swift - 斯威夫特有片面的进步吗?
- c# - 是否可以在不启动表单应用程序的情况下从 c# 类库运行 Windows 表单代码?
- macos - 如何让 --watch 标志在 OSX 命令行上工作?