一、Lambda表达式规则
- 1、lambda表达式里只能引用被final 修饰的本地变量 ,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。
- 2、局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)
- 3、lambda表达式里不允许声明一个与局部变量同名的参数或者局部变量。
package com.ljg.test;
import java.util.ArrayList;
import java.util.List;
public class LambdaTest02 {
public static void main(String[] args){
List<String> lists = new ArrayList<>();
lists.add("陈天");
lists.add("龙云");
int a = 10;
//lambda表达式便利
try {
lists.forEach(l -> {
String a = "霸道总裁";//规则第3条
System.out.println("lambda里给 外部局部变量 自动加上了 final 修饰符" + a);//规则第2条,隐式标记为 final常量
lists.add("宁晓晓");//快速失败,报运行时异常ConcurrentModificationException
});
} catch (Exception e) {
e.printStackTrace();
}finally {
a++;//编译不通过,a局部变量已被lambda表达式隐式的编辑为final
System.out.println("finally输出:" + a);
}
//常规for循环
// for (int i = 0; i < lists.size(); i++) {
// a++;
// System.out.println("list元素:" + lists.get(i));
// }
}
}