天天看点

Lambda 表达式

Lambda 表达式

说明:

lambda中

()里没有内容,可以看作形参,如果有参数,可以用逗号隔开。 -> 指要做的事情 {} 指代码块,可以理解为我们要做的内容。

使用前提:

有一个接口

接口只有一个抽象方法

同理,我们可以高仿线程的创建进行练习;

首先创建一个接口

我们想要通过这个接口做一些事情的话,一般的写法如下:

创建一个实现类

main 进行调用

如此写法相对复杂

Lambda写法对比

如果接口有参数的话,在() 中用逗号隔开就好,另外传入的参数类型是可以省略的。

例如:

这是在两个参数的时候,如果只有一个参数的时候,括号都可以省略

省略写法

如果代码块也只有一条的情况下,大括号,分号也可以省略

如果有值需要return时需要注意

如果有return 时 并且只有一行代码块去掉分号、大括号的同时 ,return也要去掉

如下写法;

匿名内部类可以是接口,可以是抽象类,也可以是具体类

Lambda表达式只能是接口,而且接口只能有一个方法

如果在接口中有多个方法的话,只能使用匿名内部类的方式

例如:有抽象类,接口,和普通类

有如上内容,我们同时用匿名内部类的方式调用

如上,用匿名内部类的方式是可以通过编译的;

但是用Lambda表达式的方式无法通过编译

此次实验再次说明在使用Lambda表达式的前提是,在接口中, 有且只有一个方法的时候。

​ 在使用匿名内部类的时候,会单独的生成一个.class字节码文件,Lambda表达式在运行的时候,会在运行的时候动态生成。

Lambda 表达式

有参总结:

参数类型可以省略不写,但是多个参数时,要么不省略,要么同时省略;

如果参数只有一个,小括号可以省略

如果代码块只有一条,大括号和分号可以省略,如果有return 也要省略。

再次强调:

使用Lambda 必须要有接口,接口中只能有一个抽象方法

Lambda 使用时必须要有上下文环境,才能到处Lambda对应的接口; #1

1.上面第二句话可能不好理解。在此解释