可能会把捕获外部变量的 Lambda 表达式称为闭包,那么 Java 8 的 Lambda 可以捕获什么变量呢?
- 捕获实例或静态变量是没有限制的(可认为是通过 final 类型的局部变量 this 来引用前两者)
- 捕获的局部变量必须显式的声明为 final 或实际效果的的 final 类型
回顾一下我们在 Java 8 之前,匿名类中如果要访问局部变量的话,那个局部变量必须显式的声明为 final,例如下面的代码放在 Java 7 中是编译不过的
Java 7 要求 version 这个局部变量必须是 final 类型的,否则在匿名类中不可引用。 阅读全文 >>