Lambda表达式使用
使用前提:
- 有一个借口
- 接口中有且只有一个抽象方法
格式:
-
构造方法(( 形式参数 ) -> { 方法体 });
-
Lambda表达式的代码分析
() : 里面没有内容,可以看成是方法形式参数为空
-> :用箭头指向后面要做的事情
{} : 包含一段代码,我们称之为代码块,可以看成是方法体中的内容
省略模式/规则
-
参数类型可以省略,如果有多个参数类型,则多个参数类型都需要省略
-
参数有且只有一个则可以省略小括号
-
如果代码块内只有一条语句则可以省略大括号,小括号,如果有return,需省略return
注意事项
- 使用Lambda表达式必须要有接口,接口中有且仅有一个抽象方法
- Lambda表达式使用必须具备上下文环境才能推导出相应实现的接口
- 根据局部变量赋值Lambda推导相应实现的接口;
Runnable r = () ->System.out.println("Lambda表达式");
- 根据调用方法的参数得知Lambda对应的实现接口:
new Thread(()-> System.out.println("Lambda表达式")).start();
Lambda表达式与匿名内部类的区别
- 所需类型不同
- 匿名内部类:可以是接口,抽象类,具体方法
- Lambda:只能是接口
- 使用限制不同
- 如果接口中,有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
- 如果接口中,有多个抽象方法,只能使用匿名内部类 ,而不能使用Lambda表达式
- 实现原理不同
- 匿名内部类在编译之后, 产生一个.class的字节码文件
- Lambda表达式在编译之后, 不会产生.class的字节码文件,会在运行的过程中动态生成