Java OCA模拟测试Lambda练习题疑问:参数l与1的区分及逻辑
关于Java Lambda练习题的疑惑解答
首先,帮你理清这两个核心问题:
1. 区分字母l和数字1
这里的l绝对是小写字母L,不可能是数字1,原因很直接:
- Java里的变量名(包括Lambda的参数名)不能以数字开头,数字
1根本没法作为合法的参数标识符; - 它对应接口
Climb中isTooHigh方法的第二个参数limit,用l作为limit的缩写是编程里很常见的简写方式,完全符合命名习惯。
2. Lambda表达式的逻辑分析
先理清楚基础的对应关系:
- 函数式接口
Climb的方法签名是boolean isTooHigh(int height, int limit);,要求接收两个int参数,返回一个boolean值; - 你调用
check方法时传入的Lambda是(h,l) -> l,其中h对应方法的height参数,l对应limit参数。
但这里有个关键问题:这段Lambda表达式是无法通过编译的!因为Lambda的返回值是int类型的l,而接口方法要求返回boolean类型,Java里int和boolean是完全不兼容的类型,没有自动转换规则,编译器会直接报错。
如果这是模拟题的内容,大概率是题目存在笔误,常见的正确写法可能是以下两种:
- 若Lambda是
(h,l) -> h > l:逻辑是判断传入的height(也就是调用check时的5)是否大于limit(check方法里固定传入的10),显然5>10为false,会输出ok; - 若Lambda是
(h,l) -> l > h:逻辑是判断limit是否大于height,10>5为true,会输出Too。
如果题目确实就是(h,l) -> l,那这道题的考点就是Lambda返回类型必须与函数式接口方法的返回类型兼容,这段代码属于编译错误的典型案例。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

