Вот что происходит:
(h,l) -> l
- это лямбда, которая принимает h
и l
и возвращает l
. В соответствии с interface Climb
, h
и l
аргументами являются int
, а возвращаемое l
должно быть bool
; похоже, что неявное преобразование типов.
Следовательно, строка check((h,l) -> l, 5);
в порядке и принимает аргументы правильного типа (Climb , int)
.
(h,l) -> l
просто делает: «давайте забудем о h, и if l != 0, return true else if l == 0 return false
».
PS: если бы это было 1
, ответ был бы постоянно true
Исправленная версия
interface Climb {
boolean isTooHigh(int height, int limit);
}
public class Main {
public static void main(String[] args) {
check((h,l) -> h>l, 5);
}
private static void check(Climb climb, int height) {
System.out.println(climb.isTooHigh(height, 10) ? "Too":"ok" );
}
}