【问题标题】:Is lambda in fact an anonymous class?lambda 实际上是一个匿名类吗?
【发布时间】:2019-07-14 16:52:11
【问题描述】:

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

【问题讨论】:

标签: java lambda java-8 anonymous-class functional-interface


【解决方案1】:

不,lambdas != 匿名内部类

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

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

有关更多讨论,请参阅 Stack Overflow 同级站点上的 this Question

【讨论】:

  • 非常感谢,这个链接正是我要找的。除了 > Java 中的 Lambda 替换了大多数(全部?)匿名内部类的使用。这本书的观点是:>(...)你可以用类做一些你不能用 lambdas 做的事情。 Lambda 仅限于功能接口。如果要创建抽象类的实例,可以使用匿名类,但不能使用 lambda。同样,您可以使用匿名类来创建具有多个抽象方法的接口实例。最后,lambda 无法获得对自身的引用。
  • @mikeProgrammer 我认为,不将 lambda 表达式视为(某些)匿名类的替代品,而是将其视为定义函数的一种手段,它现在允许替换匿名类在过去,它们被用作(我们没有更好的)定义功能的手段。另见this answer。对于伴随 lambda 长大的开发者来说,匿名类和 lambda 表达式之间不应该有任何关系。
猜你喜欢
  • 2019-01-24
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2018-07-31
相关资源
最近更新 更多