跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于“ Java – Why are only final variables accessible in anonymous class? – Stack Overflow”的疑惑
未分類
3 10 月 2020

关于“ Java – Why are only final variables accessible in anonymous class? – Stack Overflow”的疑惑

关于“ Java – Why are only final variables accessible in anonymous class? – Stack Overflow”的疑惑

資深大佬 : JasonLaw 0

在java – Why are only final variables accessible in anonymous class? – Stack Overflow中,Jon Skeet 说了这么一段话:

When you create an instance of an anonymous inner class, any variables which are used within that class have their values copied in via the autogenerated constructor. This avoids the compiler having to autogenerate various extra types to hold the logical state of the “local variables”, as for example the C# compiler does… (When C# captures a variable in an anonymous function, it really captures the variable – the closure can update the variable in a way which is seen by the main body of the method, and vice versa.)

我对“This avoids the compiler having to autogenerate various extra types to hold the logical state of the “local variables”, as for example the C# compiler does…”的理解是:如果要实现 full closures support,那么就需要产生一个共享的数据结构用来包含外部方法和内部类所共同访问的变量,这样两者都是使用同一个数据源,那么一方对变量的改变就会对另一方可见,类似Ivan Dubrov 所说的。

我不肯定我的理解是否正确,所以我想看一下大家对这句话的理解。

大佬有話說 (5)

  • 資深大佬 : mightofcode

    我觉得你的理解没错

  • 資深大佬 : lxk11153

    好像有点道理 [doge]

  • 資深大佬 : javlib

    那么以后会不会改成非 final 变量也能在闭包使用呢?就像现在的 c#

  • 主 資深大佬 : JasonLaw

    @javlib 不知道

  • 資深大佬 : yazinnnn

    闭包是代码块异地执行的手段,每个代码块实例所包含的变量(包括外部变量)放在同一个上下文里。。每个闭包过程实例有独立的生命周期

    如果你的某个代码块没有回收,那这个上下文里的相关变量也不会回收

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具