一、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));
// }
}
}