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、去掉了ー堆没有意义的代码,只留下核心的逻辑。

  • 相关阅读:
    Struts2再曝高危漏洞(S2-020补丁绕过)
    JavaWeb学习总结(十三)——使用Session防止表单重复提交
    JavaWeb学习总结(十二)——Session
    javaweb学习总结(十一)——使用Cookie进行会话管理
    如何做个好员工(转载)
    剖析云计算中的“共享型数据库”(转载)
    云计算的基本概念(转载)
    javaweb学习总结(十)——HttpServletRequest对象(一)
    javaweb学习总结(九)—— 通过Servlet生成验证码图片
    javaweb学习总结(八)——HttpServletResponse对象(二)
  • 原文地址:https://www.cnblogs.com/bigband/p/13544075.html
Copyright © 2011-2022 走看看