0
点赞
收藏
分享

微信扫一扫

Java - Lambda Error:Variable used in lambda expression should be final or effectively final


Java - Lambda Error:Variable used in lambda expression should be final or effectively final_effectively

Lambda表达式提示变量错误:Variable used in lambda expression should be final or effectively final...

Java - Lambda Error:Variable used in lambda expression should be final or effectively final_Lambda_02

注释掉第二行就OK。

分析:根据语法,变量必须为final,但是 a 已经被修改了。

为什么 Lambda 表达式(匿名类) 不能访问非 final 的局部变量呢? 因为实例变量存在堆中,而局部变量是在栈上分配,Lambda 表达(匿名类) 会在另一个线程中执行。如果在线程中要直接访问一个局部变量,可能线程执行时该局部变量已经被销毁了,而 final 类型的局部变量在 Lambda 表达式(匿名类) 中其实是局部变量的一个拷贝。

当然以上情况是在 Lambda 里不在改变值的情况下,如果需要改变值,或者试试还有一种办法就是将整个局部变量声明在 Lambda 里面。


举报

相关推荐

0 条评论