• 技术文章 >Java >java教程

    Java中对Lambda表达式的理解,来测试学习一下

    php是最好的语言php是最好的语言2018-08-01 12:03:07原创1018

    闲聊:

    JDK8出来已经很久了,在刚出来的时候稍微了解了一下,后面就丢弃了,现在重新拾取。虽然现在JDK11了。

    本文将以持续更新模式进行。

    正文:

    直接看代码,在java8新特性里,我们可以这样写:

    public static void main(String[] args) {
            Supplier<Integer> supplier = ()->1;
            Consumer<String> consumer = (a)-> System.out.println(a);
            System.out.println(supplier.get());
            consumer.accept("test");
        }

    输出:

    1
    test
    
    Process finished with exit code 0

    很洋气。如此简洁的代码,你行吗,对就是说的你java7

    首先盗一张图过来,说明一下Lambda

    1.png

    也就是说,Lambda表达式,创建了一个对应接口的实现,然后赋值给变量,是不是利用编译器?查看编译后的代码如下:

    public static void main(String[] args) {
            Supplier<Integer> supplier = () -> {
                return 1;
            };
            Consumer<String> consumer = (a) -> {
                System.out.println(a);
            };
            System.out.println(supplier.get());
            consumer.accept("test");
        }

    编译器并没有做这个功能,那就可能是JVM实现了Lambda的功能,后期再深入了解一下。标记1

    写到这里,可以知道Lambda表达式减少了代码量,在java8之前只能用匿名内部类或者创建一个类实现该接口实现该功能。如下

    Supplier<Integer> supplier = new Supplier<Integer>() {
                @Override
                public Integer get() {
                    return 1;
                }
            };

    实际上,我比较好奇伴随Lambda的接口,打开源码可以看到

    @FunctionalInterface
    public interface Supplier<T> {
    
        /**
         * Gets a result.
         *
         * @return a result
         */
        T get();
    }
    对应的接口都添加了注解FunctionalInterface,那么不要这个注解是否能实现Lambda表达式,我做了一些测试,发现不需要注解也可以实现,目前来看注解只有两个功能 
    1、表示这个接口是函数式接口 2、帮助编译器识别,接口不能有多个方法。
    在有多个方法的时候会提示Multiple non-overriding abstract methods found in interface

    现在我们可以通过FunctionalInterface来查找在JDK8里面有哪些接口是函数式接口

    1.png

    我从里面选一两个比较热门的来测试,学习

    哦,先打断一下刚看文章看到一段很重要的话(在实践中,函数式接口非常脆弱:只要某个开发者在该接口中添加一个函数,则该接口就不再是函数式接口进而导致编译失败。为了克服这种代码层面的脆弱性,并显式说明某个接口是函数式接口,Java 8 提供了一个特殊的注解)

    我选的是 ArrayList和Optional两个类,都是很常用的类。

    相关文章:

    深入理解Java中的Lambda表达式

    Java Lambda表达式初探

    相关视频:

    JavaScript正则表达式视频教程


    以上就是Java中对Lambda表达式的理解,来测试学习一下的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Java Lambda
    上一篇:Java并发包:Java通过Executors提供的四种线程池 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • Java中Map集合体系的基本使用和常用API• 一文详解怎么实现微服务鉴权• Java数据结构常见排序算法(总结分享)• 一起来分析java设计模式之单例• 深入分析Java的序列化与反序列化
    1/1

    PHP中文网