基本介绍
组成Lambda表达式的三要素:形式参数、箭头、代码块;
使用格式:(形式参数)-> {代码块};
使用前提:有一个接口,接口中有且仅有一个抽象方法;
//带参数,带返回值的形式
public static void main(String[] args){
useAddable((int x, int y) -> { //形式参数及返回值要与接口方法保持一致。
return x + y;
})
}
private static void useAddable(Addable a){
int sum = add(10, 20);
System.out.println(sum);
}
//创建一个接口
public interface Addable{
int add(int a, int b);
}
Lambda与匿名内部类的对比:
所需类型不同:匿名内部类可以是接口,抽象类,具体类,Lambda只能是接口;
使用限制不同:当接口中包含多个抽象方法时,仅能使用匿名内部类;
实现原理不同:匿名内部类编译后会产生单独的字节码文件,Lambda表达式则没有,其对应字节码文件是在运行时动态生成;
//匿名内部类
new Thread(new Runnable(){
@override
public void run(){
System.out.println("多线程启动了!")
}
}).start();
//Lambda表达式形式
new Thread(() -> {
System.out.println("多线程启动了!")
}).start();
省略模式:
参数类型(int,String等)可以省略,但多个参数时不能仅省略一个:(s)-> {};
若参数有且仅有一个,小括号可以省略:s -> {};
如果代码语句只有一条,可以省略大括号和分号,甚至return也可省略:s -> System.out.println("123");
注意事项
必须有接口,且有且仅有一个抽象方法;
必须要有上下文环境,不能单独存在;