我已经阅读了很多有关lambda的文章。但是他们是微妙的疑问:
第一季度。 lambda表达式的定义。
第2和第3链接未提及功能接口。第四个链接听起来有些不错,但没有提及lambda表达式的“匿名”方面。我们可以这样更完美地定义它们吗:
Lambda 表达式是“语法上简洁的表达式,用于定义功能接口的匿名实现”。
我相信在定义中指定单词“功能接口”应该足以说明我们实现了它的唯一方法,即使是匿名类,它的行为也类似于函数而不是类。
第二季度。我们可以区分lambda和lambda表达式吗?
我觉得有区别,因为可以使用lambda表达式来定义无状态的lambda和有状态的闭包(即外部词法范围内的访问变量)。似乎,这就是为什么oracle链接不使用“表达式”而不使用单词“ lambda”的原因。但是其他链接不是这种情况。
第三季度。 This link使用lambda表达式表示,“我们不需要像编写匿名类那样编写很多样板文件。”现在听起来就像“ Lambda表达式就像匿名类一样,”,“我们不需要像编写匿名类那样编写很多样板。”我觉得我们无法直接将lambda表达式与匿名类进行比较,因为主要区别在于概念匿名类与功能接口没有关系,而lambda表达式严格处理功能接口。因此,匿名类可以具有任意数量的方法,但是lambda表达式只能定义单个方法。这样对吗?
答案 0 :(得分:0)
对于问题1,是的,您可以将其定义为日常用途。但实际上,lambda表达式是好的旧方法的语法糖。参见此link。 Lambda的主体转换为静态方法,并且有一条invokedynamic
指令。
对于问题2,就我而言,“ lambda”在此上下文中仅是“ lambda表达式”的缩写。您不想在对话中说那么长的话,对吗?在其他情况下,“ lambda”可以指希腊字母λ。
对于问题3,我想说当需要功能接口时,lambda表达式可以替代编写匿名类的方法。在较高的抽象水平上,它们都可以表示功能接口的实例。但是,如果您需要抽象类或非功能接口的实例,则不能使用lambda。