使用单行Lambda表达式实现接口时遇编译错误,求解决方案
Lambda表达式单行写法的错误修正与说明
你遇到的问题是Lambda单行写法的语法错误——当使用单行表达式形式的Lambda时,不能显式写return关键字。你的代码(a, b) -> return a+b违反了这个语法规则,导致编译器报错。
正确的单行写法
只需去掉return,直接写表达式即可,修正后的测试类代码如下:
public class App { public static void main(String[] args) { int x; x = adder((a, b) -> a + b); // 正确的单行Lambda写法 } public static int adder(MathOperations mo){ return mo.add(3, 5); } }
Lambda两种写法的区别
Lambda表达式有两种常用写法,对应不同场景:
- 单行表达式写法:适用于逻辑仅为单个表达式的场景,格式为
(参数列表) -> 表达式。编译器会自动将该表达式的计算结果作为返回值,无需额外的return和大括号。 - 代码块写法:适用于逻辑包含多行语句的场景,格式为
(参数列表) -> { 语句1; 语句2; return 返回值; }。这种写法必须用大括号包裹代码,且需要显式通过return返回结果(匹配函数式接口的返回值要求)。
你提到的用大括号实现的写法就是第二种,示例如下:
x = adder((a, b) -> { return a + b; });
内容的提问来源于stack exchange,提问作者Błażej Pajor
相关产品推荐
相关产品推荐

