如何将指定Java代码转换为Lambda表达式?求解正确转换写法
Lambda表达式转换问题解答
嘿,咱们一步步拆解这个问题,帮你搞清楚哪个写法才是正确的!
首先先回顾你给出的原匿名内部类代码:
MyInterface myInterface = new MyInterface() { @Override public void printMe(String message) { System.out.println(message); } };
这里MyInterface是一个函数式接口(只有一个抽象方法printMe,参数为String,返回值是void),Lambda表达式必须完全匹配这个方法的签名和实现逻辑。
分析你给出的两个写法
第一个写法:
MyInterface myInterface = new MyInterface(message -> message);
这个写法全错,有两个核心问题:- Lambda表达式不需要通过
new MyInterface()创建实例——Lambda本身就是函数式接口的实例实现,直接写Lambda体即可,不需要new关键字那套语法。 - Lambda体
message -> message返回的是传入的String参数,但原方法printMe的返回值是void,类型完全不匹配,逻辑上也没有实现原有的打印操作。
- Lambda表达式不需要通过
第二个写法:
MyInterface myInterface = message -> System.out.println(message);
这个写法完全正确!咱们对照你提到的三步转换规则验证一下:- 移除方法名:原方法是
printMe,Lambda里确实没写这个名字; - 移除参数类型:原参数是
String message,Lambda里简化成了message(编译器可以通过接口方法的签名自动推断参数类型); - 移除return语句:原方法是
void类型,本身就没有return语句,Lambda体直接执行打印操作,完全符合要求。
- 移除方法名:原方法是
这个Lambda完美匹配了MyInterface中printMe方法的参数类型和行为,是正确的转换写法。
内容的提问来源于stack exchange,提问作者Andy P.
相关产品推荐
相关产品推荐

