首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Lambda表达式和变量捕获

Lambda表达式和变量捕获
EN

Stack Overflow用户
提问于 2015-08-28 21:53:01
回答 1查看 19.1K关注 0票数 14

请解释为什么lambda表达式可以使用和修改其封闭类的实例变量,但只能使用其封闭作用域的局部变量。(除非它是最终的或有效的最终的?)

我的基本问题是,在作用域的上下文中,如何在lambda中修改类的实例变量,而不能修改局部变量。

EN

回答 1

Stack Overflow用户

发布于 2018-03-01 23:48:36

你可以参考这篇文章- https://www.infoq.com/articles/Java-8-Lambdas-A-Peek-Under-the-Hood解释的lambda表达式编译。正如所解释的,λ表达式/代码块被编译成匿名类,这些匿名类是以名称格式(<<Enclosing Class name>>$<<1(Number)>>)编译的,因此假设如果允许非最终局部变量,则编译器不能从该局部变量被引用为匿名类的位置跟踪它。‘'.class’文件像普通java类一样以上述格式被单独创建/编译。

因此,如果局部变量是final,那么编译器会在无源类中创建一个final实例,这不会给编译器带来歧义。有关详细信息,请参阅上面提到的链接

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32272713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档