栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

除了保存代码行以外,lambda表达式还有其他用途吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

除了保存代码行以外,lambda表达式还有其他用途吗?

Lambda表达式通常不会改变您可以使用Java解决的问题集,但是肯定会使解决某些问题变得更加容易,这是因为我们不再使用汇编语言进行编程的原因。从程序员的工作中删除多余的任务可以使工作变得更轻松,并且可以执行您本来不会碰到的事情,而只是要产生大量的代码(手动)。

但是lambda表达式不仅节省了代码行。Lambda表达式使您可以定义 函数
,以前可以使用它们作为变通方法来解决这些问题,这就是为什么在这种情况下(但一般而言)不能替换匿名内部类的原因。

最值得注意的是,lambda表达式是独立于它们将要转换到的功能接口定义的,因此没有继承的成员可以访问,而且,它们不能访问实现该功能接口的类型的实例。在lambda表达式中,

this
并且
super
具有与周围环境相同的含义。同样,您不能创建新的局部变量来遮盖周围上下文的局部变量。对于定义函数的预期任务,这消除了很多错误源,但是这也意味着对于其他用例,即使实现了功能接口,也可能存在无法转换为lambda表达式的匿名内部类。

此外,该构造

new Type() { …}
保证产生一个新的独特实例(
new
一如既往)。如果在非
static
上下文中创建,匿名内部类实例始终保留对其外部实例的引用。相反,lambda表达式仅
this
在需要时(即它们访问
this
或为非
static
成员时)捕获对的引用。它们会生成一个有意未指定身份的实例,这使实现可以在运行时决定是否重用现有实例
”)。

这些差异适用于您的示例。您的匿名内部类构造将始终产生一个新实例,也可能捕获对外部实例的引用,而您

(Developer o1, Developer o2)->o1.getName().compareTo(o2.getName())
是一个不捕获的lambda表达式,在典型实现中其结果将为单例。此外,它不会
.class
在硬盘驱动器上生成文件。

考虑到语义和性能方面的差异,lambda表达式可能会改变程序员将来解决某些问题的方式,当然,这也是由于新的API包含了利用新语言功能进行功能编程的思想。另请参见[Java
8 lambda表达式和一等值。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486178.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号