lambda 实际上是一个匿名类吗?

mik*_*mer 5 java lambda anonymous-class java-8 functional-interface

我正在阅读《Effective Java》,想知道lambda和之间的区别anonymous class。我知道 lambda 只能与具有单一方法的接口(即功能接口)一起使用,并且在 lambda 中您无法获取对其自身的引用,因此this当在匿名类关键字this与匿名类的主体相关时,关键字与指定 lambda 的类相关。但我不知道 lambda 到底是什么。我猜这只是一个创建实现函数式接口的匿名类实例的表达式,因此与普通匿名类相比,这只是带有一些限制的语法糖,但多亏了它,我们可以摆脱样板文件并使我们的代码更具可读性。另一方面,我们可以在这里阅读有关性能差异的信息,这表明 lambda 实际上不是实现函数接口的匿名类的实例。

Bas*_*que 7

不,lambda != 匿名内部类

Java 中的 Lambda 取代了匿名内部类的许多常见用途。结果是代码更加紧凑、可读且明显。

不,lambda 的实现不是基于匿名内部类。

有关更多讨论,请参阅Stack Overflow 兄弟站点上的 此问题。

  • @mikeProgrammer 我认为,不要将 lambda 表达式视为(某些)匿名类的替代品,而是将其视为定义函数的一种手段,这更有建设性,现在允许替换匿名类(我们- don-have-better) 表示在过去定义函数。另请参阅[此答案](/sf/answers/3318587331/)。对于伴随着 lambda 长大的开发人员来说,匿名类和 lambda 表达式之间不应该有任何关系。 (3认同)