Java 8 新增的 Lambda表达式

    xiaoxiao2022-07-07  148

    Lambda 表达式支持将代码块作为方法参数。 Lambda 表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(函数式接口)的实例。

    本文包含如下内容:

    Lambda表达式入门lambda表达式与函数式接口方法引用与构造器引用Lambda 表达式与匿名内部类的联系和区别使用Lambda 表达式调用 Arrays的类方法

    1.Lambda 表达式入门

    先使用匿名内部类来改写前面介绍的 command 表达式的例子,改写后程序如下: 上面粗体字部分就是传入代码作为具体处理行为情况 Lambda 表达式可以简化创建匿名内部对象。将代码改为: 使用Lambda 表达式代替匿名内部类创建对象时,Lambda 表达式的代码将会代替实现抽象方法的方法体,Lambda 表达式就相当于一个匿名方法。 Lambda表达式可以代替匿名内部类的繁琐语法。由三部分组成: 下面程序示范了 Lambda 表达式的几种简写方法:

    2.Lambda 表达式与函数式接口

    函数式接口:只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式。 由于 Lambda 表达式的结果就是被当成对象,因此程序中完全可以使用 Lambda 表达式进行赋值。 如以下代码所示: Runnable 是 Java 本身提供的一个函数式接口。 从上面粗体字可以看出,Lambda 表达式实现的是匿名方法—因此他只能实现特定函数式接口中的唯一方法。这意味着Lambda 表达式有如下两个限制: 对于这个限制可以通过如下代码说明:

    Object obj = () ->{ for(int i = 0; i < 100; i++) { System.out.out.println(); }

    这个代码把Lambda 表达式赋给 Object 变量。编译后会出现如下错误: 不兼容的类型:Object 不是函数接口 为保证Lambda 表达式的目标类型是一个明确的函数式接口,可以有如下三种常见方式: 因此,只要将上面代码改为如下形式即可: Java 8 在java.util.function包下预定义了大量的函数式接口,典型的包含如下4类接口:

    3.方法引用与构造器引用

    如果Lambda 表达式的代码块只有一条代码,可以在代码块中使用方法引用和构造器引用。 1.引用类方法 2.引用特定对象的实例方法 3.引用某类对象的实例方法

    4.Lambda 表达式与匿名内部类的联系和区别

    Lambda 表达式是匿名内部类的一种简化。 相同点: 下面程序示范其相似之处:

    5.使用Lambda 表达式调用 Arrays 的类方法

    最新回复(0)