为什么java在内部匿名类中引用非final变量是不可能的?

时间:2011-07-12 10:33:37

标签: java closures inner-classes

  

可能重复:
  Cannot refer to a non-final variable inside an inner class defined in a different method

为什么java在内部匿名类中引用非final变量是不可能的?简单的答案是“因为它被禁止”,但我想知道,为什么他们禁止这种有用的功能?也许Java缺乏某种能力,或者它是以“错误”的方式设计的。我想知道。

1 个答案:

答案 0 :(得分:3)

原因是封闭方法返回后,局部变量不再存在。因此,在实例化匿名类时会创建变量的副本。如果Java允许随后更改局部变量,则匿名类只能知道旧值。

Java的做法与其他语言中的真实closures相反。