Lambda 表达式使用

作用:避免匿名内部类定义过多,使得代码简洁

  • 有函数式接口才能用 Lambda 表达式

函数式接口:

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。例如

    public interface Runnable{
      public abstract void run();
    }
    
  • 对于函数式接口,我们可以通过 lamda 表达式创建接口对象

  • 推导过程

    package com.thread.lambda;
    
    /**
     * 推到 Lambda 表达式
     */
    public class TestLambda1 {
        //3.静态内部类
        static class Like2 implements ILike {
            @Override
            public void lambda() {
                System.out.println("Like.Lambda2");
            }
        }
    
        public static void main(String[] args) {
            ILike like = new Like();
            like.lambda();
    
            like = new Like2();
            like.lambda();
    
            //4.局部内部类
            class Like3 implements ILike {
                @Override
                public void lambda() {
                    System.out.println("Like.Lambda3");
                }
            }
            like = new Like3();
            like.lambda();
    
            //5.匿名内部类,没有类名称,必须借助接口或父类
            like = new ILike() {
                @Override
                public void lambda() {
                    System.out.println("Like.Lambda4");
                }
            };
            like.lambda();
    
            //6.jdk1.8lambda 表达式 简化
            like = () -> {
                System.out.println("Like.Lambda5");
            };
            /**
             * 总结:
             * 简化 ,仅仅只能在一行代码时简化,多行则需要代码块包裹
             * 必须是函数式接口,接口只能只能有一个方法才可使用
             * 多参数也可以去掉参数类型
             * (a,b)->{,}
             */
    
            like =()-> System.out.println("Like.Lambda5");
            like.lambda();
        }
    }
    
    //1.定义一个函数接口
    interface ILike {
        void lambda();
    }
    
    //2.实现类
    class Like implements ILike {
        @Override
        public void lambda() {
            System.out.println("Like.Lambda1");
        }
    }
    

悲观者正确,乐观者成功
原文地址:https://www.cnblogs.com/freebule/p/14238696.html