如果您以前没有使用过lambda表达式,那么您可能想知道到底是怎么回事。 毕竟,在最基本的层次上,它们不过是实现单方法接口的一种新的,更简单的方法。 但是事实是,使用lambda表达式而不是实现功能接口的更传统方法确实有明显的好处。
Java中Lambda表达式的好处
以下是在Java中使用lambda表达式的一些主要好处:
- 简明
- 减少代码膨胀
- 可读性
- 消除阴影变量
- 鼓励函数式编程
- 代码重用
- 增强的迭代语法
- 简化变量范围
- 更少的样板代码
- JAR文件大小减少
- 并行处理机会
为了全面了解Java中的lambda表达式的好处以及它们如何提供简洁性和可读性,只需看一下如何在lambda表达式之前实现功能接口(即仅定义一个方法的接口)。 基本上可以使用两种方法。 一种方法是定义一个单独的类来实现该接口,而第二种方法是使用匿名内部类。
单类接口方法
从先前的lambda函数文章中使用单独的类来实现Comparator接口示例将如下所示:
这种方法的好处是能够在多个代码库之间共享新类,因此可以重用。 单班教学法的弊端? 首先,代码膨胀,因为实现一个方法需要一个全新的类。 此外,逻辑与需要它的地方是分开的,这将使将来的故障排除和代码维护更加困难。 为了解决这种方法的缺点,Java 1.1引入了匿名内部类的概念。
匿名内部类的优缺点
匿名内部类允许开发人员在代码中需要的地方定义和实现功能接口。 在前面的示例中,我们需要创建一个名为MyComparator的单独的类。 使用匿名内部类,您无需定义单独的类,只需实现所需的方法即可,因此命名为匿名。 这是使用匿名内部类实现时Comparator示例的外观。
匿名内部类很流行,并且比创建单独的实现类更受欢迎。 它们还允许在使用代码的地方编写实现代码,这使故障排除和长期维护变得更加容易。
但是匿名内部类也有缺点。 一个主要的缺点是代码看起来不漂亮。 如果有的话,它看起来肿。 此外,重用此代码的能力被静音,因为无法从定义它的代码外部调用匿名内部类。 匿名内部类的另一个更无害的问题是它们直接在类中引入的特殊变量范围。 在内部类外部定义的变量不采用与Java类中的块范围有关的传统规则。 结果,很容易陷入诱因的反模式,称为可变阴影。 这会产生很难解决的错误。
Lambda表达的优点和缺点
对于lambda表达式,目标是在实现功能接口时最大程度地减少使用单个类或匿名内部类的缺点,同时最大程度地提高收益。 如果您看一下使用Java中的lambda表达式实现的Comparator示例,则没有争议的事实是代码更加简洁和紧凑。
此外,lambda表达式不会产生可变阴影,从而消除了使用内部类时的主要弊端。 还应该注意的是,即使在打包和部署应用程序时,内部类也会创建一个新的.class文件,而lambda表达式则不会发生这种情况,这带来的次要好处是所创建的部署工件稍微紧凑一些。
这个简单的lambda表达式示例仅足以证明与其他方法相比,Java中的lambda表达式具有一些好处。 在更高级地研究lambda表达式时,您将发现它们如何使用新的功能性forEach方法使迭代处理更加容易。 而且由于可以将lambda表达式分配给变量,因此它们提供了重用的机会,而匿名内部类根本无法实现重用。
lambda表达式最终花了很长时间才最终成为Java语言,但是考虑到在Java代码中使用lambda表达式的好处,因此,当目标部署平台升级到JDK的较新版本时,开发人员会为此感到兴奋。 。