Java Lambdas接口

时间:2018-10-16 23:06:09

标签: java lambda java-8 functional-programming

众所周知,我们的工程师在夜间工作得最好:) 昨天晚上我在学习lambdas,我看到了一段类似的代码,

numRows

该示例只是将lambda表达式分配给MathOperation接口的变量,但是如何呢? 它在接口中实现了名为 operation 的方法的实现,而让我感到困惑的是将该实现分配给了接口变量。我真的很想知道基于这种方法的想法。 谢谢大家。

1 个答案:

答案 0 :(得分:1)

您可以将lambda表达式分配给一致的功能接口类型-即参数类型和返回类型匹配。有关详细信息,请参见JLS, Section 15.27.3,但本质上是:

  

如果T是功能接口类型(第9.8节)且表达式为,则lambda表达式在分配上下文,调用上下文或强制转换上下文中与目标类型T兼容。 与来自T地面目标类型的功能类型完全一致。

JLS, Section 9.8定义了一个功能接口:

  

功能接口是仅具有一个抽象方法(除了Object的方法之外)的接口,因此表示单个功能协定。

您的MathOperation接口不是Java内置的也没关系,也没用@FunctionalInterface进行注释也没关系。它具有一种抽象方法,并且参数和返回类型匹配,因此符合条件。