众所周知,我们的工程师在夜间工作得最好:) 昨天晚上我在学习lambdas,我看到了一段类似的代码,
numRows
该示例只是将lambda表达式分配给MathOperation接口的变量,但是如何呢? 它在接口中实现了名为 operation 的方法的实现,而让我感到困惑的是将该实现分配给了接口变量。我真的很想知道基于这种方法的想法。 谢谢大家。
答案 0 :(得分:1)
您可以将lambda表达式分配给一致的功能接口类型-即参数类型和返回类型匹配。有关详细信息,请参见JLS, Section 15.27.3,但本质上是:
如果
T
是功能接口类型(第9.8节)且表达式为,则lambda表达式在分配上下文,调用上下文或强制转换上下文中与目标类型T
兼容。 与来自T
的地面目标类型的功能类型完全一致。
JLS, Section 9.8定义了一个功能接口:
功能接口是仅具有一个抽象方法(除了
Object
的方法之外)的接口,因此表示单个功能协定。
您的MathOperation
接口不是Java内置的也没关系,也没用@FunctionalInterface
进行注释也没关系。它具有一种抽象方法,并且参数和返回类型匹配,因此符合条件。