深入浅出理解 Variable used in lambda expression should be final or effectively final
翻译:lambda 表达式中使用的变量应该是 final 或者有效的 final
原因解析:lambda表达式(多用在线程领域),是由匿名内部类演变来的。
匿名内部类产生的对象一般存放在JVM的堆区域,而局部变量会存放在JVM的栈区域,随着方法调用结束,局部变量就会出栈,被当做垃圾回收掉。
而此时,内部类对象可能还存在,如果内部类对象这时直接去访问局部变量的话就会出问题,因为外部局部变量已经被回收了。
一个解决问题的思路是:将用到的变量在内部类中复制一份。
但这样会造成数据不一致的问题:即使我们在内部类中复制了遍历, 但在执行方法的时候局部变量的值改变了却无法通知匿名内部类。随着程序的运行,会导致程序运行的结果与预期不同
因此,我们需要给复制的变量加上final关键字,使他成为一个常量, 这样就可以被lambda表达式或内部类调用了。
有用就点个赞吧!
深入浅出理解 Variable used in lambda expression should be final or effectively final相关推荐
- 编译器说 Lambda 表达式中的变量必须是 final 的,我偏不信 | 原力计划
作者 | 沉默王二 来源 | CSDN博客专家 出品 | CSDN(ID:CSDNnews) 偶尔,我们需要在 Lambda 表达式中修改变量的值,但如果直接尝试修改的话,编译器不会视而不见听而不闻, ...
- java nextintln_java – 从lambda表达式引用的局部变量必须是final或者有效的final
我有一个JavaFX 8程序(适用于JavaFXPorts交叉平台),它实际上是为了做我想做的事情,但却是一步之遥.程序读取文本文件,对行进行计数以建立随机范围,从该范围中选取一个随机数并读取该行以进 ...
- foreach无法给外部变量赋值(Local variable decimal defined in an enclosing scope must be final or effectively )
报错信息如下: Local variable decimal defined in an enclosing scope must be final or effectively final 原因:在 ...
- [原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression
较之前一个版本,对于C# 3.x和VB 9来说,LINQ是最具吸引力的.基本上很多的新的特性都是围绕着LINQ的实现来设计的.借助Extension Method,我们可以为LINQ定义一系列的Ope ...
- 0x55——C#中的Lambda Expression
本文主要参考MSDN上的Lambda Expression(C# Programming Guide),博文Lambda Expression和code project上的博文Exploring La ...
- Lambda Expression
"Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstra ...
- java expression 用法_浅析Java 8新特性Lambda Expression
什么是Lambda Expression 对于Lambda Expression,我的理解是,它是一个函数表达式,如下: (int x, int y) -> x - y 符号左边定义了函数的输入 ...
- 今晚8点直播 | 深入浅出理解A3C强化学习
强化学习是一种比较传统的人工智能手段,在近年来随着深度学习的发展,强化学习和深度学习逐渐结合在了一起.这种结合使得很多原来无法想象的工作有了可能,最令我们瞩目的莫过于AlphaGo战胜李世石,以及Op ...
- 今晚直播 | 深入浅出理解A3C强化学习
强化学习是一种比较传统的人工智能手段,在近年来随着深度学习的发展,强化学习和深度学习逐渐结合在了一起.这种结合使得很多原来无法想象的工作有了可能,最令我们瞩目的莫过于AlphaGo战胜李世石,以及Op ...
最新文章
- elasticsearch负载均衡节点——客户端节点 node.master: false node.data: false 其他配置和master 数据节点一样...
- Python爬虫初学(三)—— 模拟登录知乎
- zz测试接口_使用FizzBu​​zz和JUnitParams进行单元测试
- python3 unicode字符串_【已解决】Python3中如何声明字符串是unicode类型以避免log日志打印出错...
- 信息学奥赛一本通 1018:其他数据类型存储空间大小 | OpenJudge NOI 1.2 03
- vue中this.init用法_Vue中的this.$options.data()和this.$data用法说明
- 如何使用DotfuscatorPro_4.9对软件进行加密
- Structs详细用法(一)
- 欧陆词典导入词典库(自定义英文词典)
- 用SPSS求均值 方差 标准差小例题
- RecycleView 删除指定item
- 处理行内元素行内块元素中间空隙
- Cisco WLC和瘦ap的配置
- MLC Flash 笔记
- 试题与研究杂志试题与研究杂志社试题与研究编辑部2023年第2期目录
- NIKE的网络营销案例给我们的启发
- 神经网络常用激活函数及其应用举例
- 如何写一个简单java接口的例子(内容详细,适合初学者)
- android 自定义View 视差动画
- 期末大作业--德州扑克(包含双人手动发牌,多人手动发牌,多人手动、自动发牌三个版本)