翻译:lambda 表达式中使用的变量应该是 final 或者有效的 final

原因解析:lambda表达式(多用在线程领域),是由匿名内部类演变来的。

匿名内部类产生的对象一般存放在JVM的堆区域,而局部变量会存放在JVM的栈区域,随着方法调用结束,局部变量就会出栈,被当做垃圾回收掉。

而此时,内部类对象可能还存在,如果内部类对象这时直接去访问局部变量的话就会出问题,因为外部局部变量已经被回收了。

一个解决问题的思路是:将用到的变量在内部类中复制一份。

但这样会造成数据不一致的问题:即使我们在内部类中复制了遍历, 但在执行方法的时候局部变量的值改变了却无法通知匿名内部类。随着程序的运行,会导致程序运行的结果与预期不同

因此,我们需要给复制的变量加上final关键字,使他成为一个常量, 这样就可以被lambda表达式或内部类调用了。


有用就点个赞吧!

深入浅出理解 Variable used in lambda expression should be final or effectively final相关推荐

  1. 编译器说 Lambda 表达式中的变量必须是 final 的,我偏不信 | 原力计划

    作者 | 沉默王二 来源 | CSDN博客专家 出品 | CSDN(ID:CSDNnews) 偶尔,我们需要在 Lambda 表达式中修改变量的值,但如果直接尝试修改的话,编译器不会视而不见听而不闻, ...

  2. java nextintln_java – 从lambda表达式引用的局部变量必须是final或者有效的final

    我有一个JavaFX 8程序(适用于JavaFXPorts交叉平台),它实际上是为了做我想做的事情,但却是一步之遥.程序读取文本文件,对行进行计数以建立随机范围,从该范围中选取一个随机数并读取该行以进 ...

  3. 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 原因:在 ...

  4. [原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression

    较之前一个版本,对于C# 3.x和VB 9来说,LINQ是最具吸引力的.基本上很多的新的特性都是围绕着LINQ的实现来设计的.借助Extension Method,我们可以为LINQ定义一系列的Ope ...

  5. 0x55——C#中的Lambda Expression

    本文主要参考MSDN上的Lambda Expression(C# Programming Guide),博文Lambda Expression和code project上的博文Exploring La ...

  6. Lambda Expression

    "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstra ...

  7. java expression 用法_浅析Java 8新特性Lambda Expression

    什么是Lambda Expression 对于Lambda Expression,我的理解是,它是一个函数表达式,如下: (int x, int y) -> x - y 符号左边定义了函数的输入 ...

  8. 今晚8点直播 | 深入浅出理解A3C强化学习

    强化学习是一种比较传统的人工智能手段,在近年来随着深度学习的发展,强化学习和深度学习逐渐结合在了一起.这种结合使得很多原来无法想象的工作有了可能,最令我们瞩目的莫过于AlphaGo战胜李世石,以及Op ...

  9. 今晚直播 | 深入浅出理解A3C强化学习

    强化学习是一种比较传统的人工智能手段,在近年来随着深度学习的发展,强化学习和深度学习逐渐结合在了一起.这种结合使得很多原来无法想象的工作有了可能,最令我们瞩目的莫过于AlphaGo战胜李世石,以及Op ...

最新文章

  1. elasticsearch负载均衡节点——客户端节点 node.master: false node.data: false 其他配置和master 数据节点一样...
  2. Python爬虫初学(三)—— 模拟登录知乎
  3. zz测试接口_使用FizzBu​​zz和JUnitParams进行单元测试
  4. python3 unicode字符串_【已解决】Python3中如何声明字符串是unicode类型以避免log日志打印出错...
  5. 信息学奥赛一本通 1018:其他数据类型存储空间大小 | OpenJudge NOI 1.2 03
  6. vue中this.init用法_Vue中的this.$options.data()和this.$data用法说明
  7. 如何使用DotfuscatorPro_4.9对软件进行加密
  8. Structs详细用法(一)
  9. 欧陆词典导入词典库(自定义英文词典)
  10. 用SPSS求均值 方差 标准差小例题
  11. RecycleView 删除指定item
  12. 处理行内元素行内块元素中间空隙
  13. Cisco WLC和瘦ap的配置
  14. MLC Flash 笔记
  15. 试题与研究杂志试题与研究杂志社试题与研究编辑部2023年第2期目录
  16. NIKE的网络营销案例给我们的启发
  17. 神经网络常用激活函数及其应用举例
  18. 如何写一个简单java接口的例子(内容详细,适合初学者)
  19. android 自定义View 视差动画
  20. 期末大作业--德州扑克(包含双人手动发牌,多人手动发牌,多人手动、自动发牌三个版本)

热门文章

  1. Netty学习笔记(三)EventLoopGroup开篇
  2. 阿里技术:万级规模K8s如何管理?
  3. 为什么 Java 中 2*(i*i) 比 2*i*i 更快?
  4. 一次流量不均衡问题的排查记录
  5. 火山引擎端云一体化服务:打造面向体验的视频云
  6. 使用结构化的标头字段改善HTTP
  7. 一种全新的点击率建模方案
  8. 腾讯专有云研发过程首次披露
  9. 分布式计算框架Gearman原理详解
  10. 项目中要使用到动态规划该怎么应用,怎么说?