zoukankan      html  css  js  c++  java
  • Lambda 表达式推演全过程

    Java 的 Lambda 表达式推演过程:

    第一步:正常的类实现(外部实现),new一个对象,然后重写方法实现

    public class TestLambda3 {
    
        public static void main(String[] args) {
            Human human = new Man();
            human.run(1);
        }
    }
    
    //定义一个函数式接口
    interface Human {
        void run(int a);
    }
    
    //外部实现类
    class Man implements Human {
        @Override
        public void run(int a) {
            System.out.println("A man can run fast --> " + a);
        }
    }
    

    第二步:把类的实现放到内部,静态内部类

    public class TestLambda3 {
    
        //实现类:静态内部类
        static class Man implements Human {
            @Override
            public void run(int a) {
                System.out.println("A man can run fast --> " + a);
            }
        }
    
        public static void main(String[] args) {
            Human human = new Man();
            human.run(2);
        }
    }
    
    //定义一个函数式接口
    interface Human {
        void run(int a);
    }
    

    第三步:局部内部类

    public class TestLambda3 {
    
        public static void main(String[] args) {
    
            //实现类:局部内部类
            class Man implements Human {
                @Override
                public void run(int a) {
                    System.out.println("A man can run fast --> " + a);
                }
            }
    
            Human human = new Man();
            human.run(3);
        }
    }
    
    //定义一个函数式接口
    interface Human {
        void run(int a);
    }
    

    第四步:匿名内部类,没有类的名称,必须借助接口或父类

    public class TestLambda3 {
    
        public static void main(String[] args) {
    
            //实现类:匿名内部类
            Human man = new Human(){
                @Override
                public void run(int a) {
                    System.out.println("A man can run fast --> " + a);
                }
            };
    
            man.run(4);
        }
    }
    
    //定义一个函数式接口
    interface Human {
        void run(int a);
    }
    

    第五步:Lambda简化

    public class TestLambda3 {
    
        public static void main(String[] args) {
    
            //Lambda简化
            Human man = (a) -> {
                    System.out.println("A man can run fast --> " + a);
            };
    
            man.run(5);
        }
    }
    
    //定义一个函数式接口
    interface Human {
        void run(int a);
    }
    

    第六步:Lambda 再简化成一行

    public class TestLambda3 {
    
        public static void main(String[] args) {
    
            //Lambda简化
            Human man = a -> System.out.println("A man can run fast --> " + a);
    
            man.run(6);
        }
    }
    
    //定义一个函数式接口
    interface Human {
        void run(int a);
    }
    

    总结:
    1、 对于函数式接口,我们可以通过 Lambdaa 表达式来创建该接口的对象。
    2、什么是函数式接口?任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
    3、如果接口不是函数式接口,就不能用 Lambda 表达式来创建该接口的对象了。
    4、Java 的 Runnable 接口就是函数式接口,该接口里面只有一个 run() 方法。
    5、如果方法的执行体里面有多行,就不能做到第六步里面那样简化成一行,需要用第五步里的 {} 包裹代码段。

    为什么要使用 Lambda 表达式?
    1、避免匿名内部类定义过多
    2、可以让你的代码看起来很简洁
    3、去掉了ー堆没有意义的代码,只留下核心的逻辑。

  • 相关阅读:
    PostgreSQL备份工具-pg_probackup
    Multi-Master Replication Solutions for PostgreSQL
    PostgreSQL高可用:多主复制解决方案
    Postgressql高可用(pgpool+异步流复制)转
    AudioFlinger
    GPIO口配置为上拉,下拉输入
    转【Qualcomm高通音频】音效调试_录音文件播放有杂音,如何定位原因?
    转【Qualcomm高通音频】如何使用QXDM、QCAT、CoolEditor音频日志抓取、解析和分析?
    转【Qualcomm高通音频】调试工具QACT_如何新增一套音效
    转【Qualcomm高通音频】调试工具QACT_如何更换音效的音频拓扑
  • 原文地址:https://www.cnblogs.com/bigband/p/13544075.html
Copyright © 2011-2022 走看看