java8学习笔记

Lambda 表达式

三、Lambda 表达式

5. 类型检查、类型推断以及限制

使用局部变量

Lambda 可以没有限制地捕获(也就是在其主体中引用)实例变量和静态变量。但是局部变量必须显式申明为 final, 或者事实上是final

Variable used in lambda expression should be final or effectively final

例如下面的 代码是可以编译的

1
2
int portNumber = 1337;
Runnable r = () -> System.out.println(portNumber);

上面的代码在 Lambda 中引用了局部变量 portNumber,虽然这个变量没有声明为 final ,但是在其声明赋初值之后,并没有试图去改变这个变量的值,所以这个变量事实上是 final 状态。

下面的代码不能通过编译

1
2
3
int portNumber = 1337;
Runnable r = () -> System.out.println(portNumber);
portNumber = 31337;

上面的代码在第三行试图修改 portNumber 的值,所以这个变量并不是事实上 final

作者

Bruce Liu

发布于

2019-05-06

更新于

2022-11-12

许可协议

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.