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
相关产品推荐
相关产品推荐

