这是关于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表达式。 hl是参数(int),它将返回是否是h > l(因此结果确实是boolean)。因此,例如,您可以编写:

Climb climb = (h, l) -> h > l;
System.out.println(climb.isTooHigh(0, 2)); //false because 0 > 2 is not true

09-11 19:20