5分钟了解 JAVA lambda 表达式


    ​ Java8 的 lambda 表达式,与其他语言的匿名函数一样,是一段可以被传递的代码,因此可以被执行一次或多次。


    可能很多人一看见带 -> 这样的箭头函数就发蒙,其实,只要知道两个字,就可以基本理解lambda表达式了,这两个字就是——推断。


    每个lambda表达式都对应一个函数式接口,函数式接口是只包含一个抽象方法的接口,而lambda表达式,就是这个抽象接口的具体实现,所以通过这两个对应关系,jvm在解析lambda表达式时,就可以推断出很多东西,比如接口类型、方法的参数类型,以及方法的返回值类型等。


    通过这些推断,使lambda表达式看起来神秘而简洁。而一旦了解推断的方式,对于lambda表达式的方法引用,如: System.out::println ,和构建器引用,如:

        List<String> labels=.........;

        Stream<Button> stram = label.stram().map( Button::new );

理解起来都很容易了

扫描二维码关注公众号,回复: 5142463 查看本文章


    下面通过几幅原创的漫画,说明一下推断的过程







    ​当然,使用lambda表达式还有一些需要特别注意的问题,最重要的需要遵守的约束就是,在lambda中,被引用的变量,即闭包之外的变量,不可被更改。


    ​如下代码即违背了这一约束:

    ​public static void repeatMessage(String text, int count) {

    ​    ​Runable r = () -> {

    ​    ​    ​while (count > 0) {

    ​    ​    ​    ​count--; //错误,不能更改闭包引入变量的值

    ​    ​    ​}

    ​    ​}

    ​}


    ​至于为什么有这样一个约束,主要式基于线程安全方面的考虑。


    ​

敬请扫码关注盲点技术号,我们将持续努力与您一起学习探讨开发技术


猜你喜欢

转载自blog.csdn.net/qq_18730155/article/details/80727734