这是关于lambda表达的一个问题。我对check((h, l) -> h > l, 0);
行中的语法感到困惑:check()
函数需要Climb对象和一个int。上面的行没有提供任何Climb对象。 h > l, 0
是什么意思?
interface Climb {
boolean isTooHigh(int height, int limit);
}
class Climber {
public static void main(String[] args) {
check((h, l) -> h > l, 0);
}
private static void check(Climb climb, int height) {
if (climb.isTooHigh(height, 1))
System.out.println("too high");
else
System.out.println("ok");
}
}
最佳答案
您的Climb
接口遵守functional interface的约定,即带有单个抽象方法的接口。
因此,可以使用lambda表达式来实现Climb
的实例,即在这种情况下以两个int作为参数并返回布尔值的表达式。(h, l) -> h > l
是实现它的lambda表达式。 h
和l
是参数(int
),它将返回是否是h > l
(因此结果确实是boolean
)。因此,例如,您可以编写:
Climb climb = (h, l) -> h > l;
System.out.println(climb.isTooHigh(0, 2)); //false because 0 > 2 is not true