Lambda表达式允许将一个函数当作参数传给方法(可通过函数式接口接收一个Lambda表达式),使代码更简洁;
jdk1.8之前使用匿名类和jdk1.8使用Lambda表达式创建线程的代码比较:
Lambda表达式语法:
- (params) -> expression
- (params) -> {statememts;}
表达式说明:
- 参数类型可以省略,编译器可以自动识别;
- 只有一个参数的时候,括号可以省略;
- 主体只有一个语句的时候,花括号可以省略;
- 主体只有一个表达式并且不写花括号的时候可以默认自动return,如果加了花括号则需要显式写入return关键字;
几个例子:
Lambda表达式注意事项:
- Lambda表达式引用的外层局部变量必须是final的,没有用final修饰的会自动认为是final变量(外部代码不可以修改变量的值);
- Lambda表达式的参数不能跟外边局部变量同名,表达式内部变量也不能跟局部变量同名;