Lambda表达式--闭包
什么是闭包?
在Lambda表达式中引用方法中的变量, 称作闭包.
public class ClosureOne { public static void main(String[] args) { //什么是闭包? //在Lambda表达式中引用方法中的变量, 称作闭包. 且闭包会延长局部变量的生命周期. int i = getNumber().get(); } private static Supplier<Integer> getNumber(){ int i = 10 ; return () -> { return i; }; } }
闭包的特性
当Lambda表达式引用一个局部变量是, 系统在编译时期会默认加上 final 修饰.
public class ClosureTwo { public static void main(String[] args) { //lambda表达式中引用一个变量, 必须保证a是一个常量. 在闭包中使用一个默认值,会加上 final 修饰 int num = 10; Consumer<Integer> c = ele -> { //正确引用 System.out.println(num+1); //报错引用 System.out.println(num++); }; c.accept(20); } }