Lambda表达式使用

使用前提:

  1. 有一个借口
  2. 接口中有且只有一个抽象方法

格式:

  1. 构造方法(( 形式参数 ) -> { 方法体 });

  2. Lambda表达式的代码分析
    () : 里面没有内容,可以看成是方法形式参数为空
    -> :用箭头指向后面要做的事情
    {} : 包含一段代码,我们称之为代码块,可以看成是方法体中的内容

省略模式/规则

  1. 参数类型可以省略,如果有多个参数类型,则多个参数类型都需要省略

  2. 参数有且只有一个则可以省略小括号

  3. 如果代码块内只有一条语句则可以省略大括号,小括号,如果有return,需省略return

注意事项

  1. 使用Lambda表达式必须要有接口,接口中有且仅有一个抽象方法
  2. Lambda表达式使用必须具备上下文环境才能推导出相应实现的接口
    • 根据局部变量赋值Lambda推导相应实现的接口;
    • Runnable r = () ->System.out.println("Lambda表达式");
    • 根据调用方法的参数得知Lambda对应的实现接口:
    • new Thread(()-> System.out.println("Lambda表达式")).start();

Lambda表达式与匿名内部类的区别

  1. 所需类型不同
    • 匿名内部类:可以是接口,抽象类,具体方法
    • Lambda:只能是接口
  2. 使用限制不同
    • 如果接口中,有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
    • 如果接口中,有多个抽象方法,只能使用匿名内部类 ,而不能使用Lambda表达式
  3. 实现原理不同
    • 匿名内部类在编译之后, 产生一个.class的字节码文件
    • Lambda表达式在编译之后, 不会产生.class的字节码文件,会在运行的过程中动态生成
上一篇 下一篇