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

Java Lambda函数疑问:参数传递与内部打印实现

关于Java Lambda表达式的两个问题解答

首先明确:MyClass作为函数式接口,它的抽象方法一定定义了(info, cn)这两个参数(比如方法签名可能是boolean test(InfoType info, CnType cn)),你写的Lambda表达式本质是这个抽象方法的实现。

问题1:Lambda的info参数为何无需显式传递?

你当前的代码只是创建了一个实现MyClass接口的Lambda实例,并把它赋值给myClassObject变量,这一步并没有调用Lambda对应的抽象方法。

只有当你后续调用myClassObject的抽象方法时(比如myClassObject.test(传入的info实例, 传入的cn实例)),才会把调用时传入的info对象传递给Lambda里的info参数,用来执行info.user.equals(user)的逻辑。

举个MyClass接口的示例辅助理解:

// 假设MyClass的定义如下
interface MyClass {
    boolean match(InfoClass info, CnClass cn); // 抽象方法的参数对应Lambda的(info, cn)
}

当你执行myClassObject.match(myInfo, myCn)时,myInfo就会被传入Lambda的info参数中。

问题2:如何在Lambda内部打印info对象的值?

把原来的单行Lambda表达式改成代码块形式,在代码块中添加System.out.println语句即可,注意代码块形式的Lambda必须显式写return语句(因为抽象方法有返回值)。

修改后的代码如下:

static MyClass myFunc(ClassB user) {
    return (info, cn) -> {
        // 打印info对象本身,或者按需打印info的属性,比如info.user
        System.out.println("info对象的值:" + info);
        return info.user.equals(user);
    };
}

内容的提问来源于stack exchange,提问作者user3797829

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:20:13