Java Lambda表达式

1. Lambda表达式强调函数式编程思想:“强调做什么,而不是以什么形式去做”;格式如下:

(形式参数) -> {代码块}

2. 使用Lambda必须要有接口,并且要求接口中有且只有一个抽象方法。

3. 使用Lambda必须有上下文环境,才能推导出Lambda对应的接口。

() -> System.out.println("Lambda");//直接写,错误,无上下文环境就没意义
Runnable r = () -> System.out.println("Lambda");//赋值给一个接口,正确,有上下文
new Thread(r).start();
new Thread(()-> System.out.println("Lambda")).start();//作为调用方法参数传入,也可以

4. Lambda表达式和匿名内部类的区别

(1)所需类型不同

  • 匿名内部类:可以是接口,抽象类,也可以是具体类
  • Lambda表达式:只能是接口

(2)使用限制不同

  • 接口中只有一个抽象方法,可以用Lambda表达式也可以使用匿名内部类
  • 接口中有多个抽象方法,只能用匿名内部类(重写多个抽象方法)

(3)实现原理不同

  • 匿名内部类:编译之后,产生一个单独的.class字节码文件
  • Lambda表达式:编译后不会有多余的字节码文件,对应的字节码文件在运行时动态生成

 

posted @ 2020-09-19 19:14  Kinghao0319  阅读(27)  评论(0编辑  收藏  举报