6.2.1 为什么引入 lambda 表达式
lambda 是可以传递的代码块.
偷笑, Go 中的函数是一等公民.
6.2.2 lambda 表达式的语法
没有参数仍要写 ()
:
自动推断类型:
参数只有一个并且类型可推导时, 可省略 ()
:
自动推导返回值类型
- 必须有返回值
6.2.3 函数式接口
只有一个方法的接口.
通过泛型接口来保存 lambda 表达式:
6.2.4 方法引用
传递方法:
var timer = new Timer(1000, System.out::println);
赋值时自动生成对象:
Runnable task = System.out::println;
6.2.5 构造器引用
数组的构造器引用:
int[]::new
6.2.6 变量作用域
不能在 lambda 中更改自由变量的值:
- start
不能引用会变化的自由变量:
- i
lambda 捕获变量的规则:
- 变量是事实最终变量
lambda 内的作用域与其所在作用域是同一个作用域:
this 是 lambda 所在的对象的: