You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定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);
    这个写法全错,有两个核心问题:

    1. Lambda表达式不需要通过new MyInterface()创建实例——Lambda本身就是函数式接口的实例实现,直接写Lambda体即可,不需要new关键字那套语法。
    2. Lambda体message -> message返回的是传入的String参数,但原方法printMe的返回值是void,类型完全不匹配,逻辑上也没有实现原有的打印操作。
  • 第二个写法:MyInterface myInterface = message -> System.out.println(message);
    这个写法完全正确!咱们对照你提到的三步转换规则验证一下:

    1. 移除方法名:原方法是printMe,Lambda里确实没写这个名字;
    2. 移除参数类型:原参数是String message,Lambda里简化成了message(编译器可以通过接口方法的签名自动推断参数类型);
    3. 移除return语句:原方法是void类型,本身就没有return语句,Lambda体直接执行打印操作,完全符合要求。

这个Lambda完美匹配了MyInterface中printMe方法的参数类型和行为,是正确的转换写法。

内容的提问来源于stack exchange,提问作者Andy P.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:48:46