java-lambda(笔记)

作用

  1. 避免匿名内部类定义过多
  2. 使代码简洁
  3. 去掉了没有意义的代码,只留下核心

函数式接口

只包含一个抽象方法的函数式接口

对于函数式接口,可用lambda表达式

推导lambda表达式

  1. 最早期版本(用了多态,父类引用指向子类对象,有继承的方法用子类的)

    package com.zihan.thread;
    
    /*
     推导lambda表达式
     */
    public class lambda {
        public static void main(String[] args) {
            ILike like = new like();
            like.lambda();
        }
    }
    
    //定义一个函数式接口
    interface ILike{
        void lambda();
    }
    //实现类
    class like implements ILike{
        public void lambda(){
            System.out.println("111222");
        }
    }
    
  2. 优化之后用静态内部类

    注意static class这一块,下面属于类型转换,高转低

    package com.zihan.thread;
    
    /*
     推导lambda表达式
     */
    public class lambda {
        //3.静态内部类
        static class like2 implements ILike{
            public void lambda(){
                System.out.println("111222");
            }
        }
    
    
        public static void main(String[] args) {
            ILike like = new like();
            like.lambda();
            like = new like2();
            like.lambda();
        }
    }
    
    //定义一个函数式接口
    interface ILike{
        void lambda();
    }
    //实现类
    class like implements ILike{
        public void lambda(){
            System.out.println("111222");
        }
    }
    
  3. main 方法里写局部内部类

    package com.zihan.thread;
    
    /*
     推导lambda表达式
     */
    public class lambda {
        //3.静态内部类
        static class like2 implements ILike{
            public void lambda(){
                System.out.println("111222");
            }
        }
    
    
        public static void main(String[] args) {
            ILike like = new like();
            like.lambda();
            like = new like2();
            like.lambda();
            //4.局部内部类
            class like3 implements ILike{
                public void lambda(){
                    System.out.println("111222");
                }
            }
            like = new like3();
            like.lambda();
        }
    
    
    
    }
    
    //定义一个函数式接口
    interface ILike{
        void lambda();
    }
    //实现类
    class like implements ILike{
        public void lambda(){
            System.out.println("111222");
        }
    }
    
  4. 用了匿名内部类

    package com.zihan.thread;
    
    /*
     推导lambda表达式
     */
    public class lambda {
        //3.静态内部类
        static class like2 implements ILike{
            public void lambda(){
                System.out.println("111222");
            }
        }
    
    
        public static void main(String[] args) {
            ILike like = new like();
            like.lambda();
            like = new like2();
            like.lambda();
            //4.局部内部类
            class like3 implements ILike{
                public void lambda(){
                    System.out.println("111222");
                }
            }
            like = new like3();
            like.lambda();
    
            //5.匿名内部类
            like = new ILike() {
                @Override
                public void lambda() {
                    System.out.println("111222");
                }
            };
            like.lambda();
        }
    
    
    
    }
    
    //定义一个函数式接口
    interface ILike{
        void lambda();
    }
    //实现类
    class like implements ILike{
        public void lambda(){
            System.out.println("111222");
        }
    }
    
  5. 用lambda解决

    package com.zihan.thread;
    
    /*
     推导lambda表达式
     */
    public class lambda {
        //3.静态内部类
        static class like2 implements ILike{
            public void lambda(){
                System.out.println("111222");
            }
        }
    
    
        public static void main(String[] args) {
            ILike like = new like();
            like.lambda();
            like = new like2();
            like.lambda();
            //4.局部内部类
            class like3 implements ILike{
                public void lambda(){
                    System.out.println("111222");
                }
            }
            like = new like3();
            like.lambda();
    
            //5.匿名内部类
            like = new ILike() {
                @Override
                public void lambda() {
                    System.out.println("111222");
                }
            };
            like.lambda();
            //6. 用lambda简化
            like = ()->{
                System.out.println("111222");
            };
            like.lambda();
        }
    
    
    
    }
    
    //定义一个函数式接口
    interface ILike{
        void lambda();
    }
    //实现类
    class like implements ILike{
        public void lambda(){
            System.out.println("111222");
        }
    }
    

    静态内部类要放在psvm外面,其余内部类放在psvm中,因为static在主方法之前

  6. 带参数的例子

    package com.zihan.thread;
    
    public class Lambda2 {
        static class Love implements Ilove {
            @Override
            public void love(int a) {
                System.out.println("i love " + a);
            }
        }
    
        public static void main(String[] args) {
    
    
            Ilove love = (int a) -> {
                System.out.println("i love " + a);
            };
            love.love(3);
    
            //简化一,去参数类型
            love = ( a) -> {
                System.out.println("i love " + a);
            };
            love.love(4);
            //简化二,去参数括号
            love = a -> {
                System.out.println("i love " + a);
            };
            love.love(5);
            //简化三,取代码体花括号
            love = a -> System.out.println("i love " + a);;
            love.love(521);
        }
    }
    
posted @ 2021-09-06 22:18  SaSikun  阅读(78)  评论(0)    收藏  举报