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);
    }

}

 

 
posted @ 2020-03-23 17:10  少林拖地僧  阅读(525)  评论(0)    收藏  举报
Live2D