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

  • 相关阅读:
    什么是“开放构造类型”,“封闭构造类型”
    代码整洁整洁之道读书笔记 2
    学习 WCF By Visual Studio 2010 (1)起步“全双工”
    代码整洁整洁之道读书笔记 1
    学习 WCF By Visual Studio 2010 (2) 宿主
    持久层通用组件设计与范例,写给某孩子(基于JDBC)
    [zz]JS后退一页, JS返回上一页代码, JS返回下一页,JS返回第几页,JS页面跳转, JS引用JS
    web下vs2008+crystal report 不预览直接打印
    用SQL语句删除重复记录
    Gridview 添加行.
  • 原文地址:https://www.cnblogs.com/bigband/p/13544075.html
Copyright © 2011-2022 走看看