可能重复:
Cannot refer to a non-final variable inside an inner class defined in a different method
为什么java在内部匿名类中引用非final变量是不可能的?简单的答案是“因为它被禁止”,但我想知道,为什么他们禁止这种有用的功能?也许Java缺乏某种能力,或者它是以“错误”的方式设计的。我想知道。
答案 0 :(得分:3)
原因是封闭方法返回后,局部变量不再存在。因此,在实例化匿名类时会创建变量的副本。如果Java允许随后更改局部变量,则匿名类只能知道旧值。
Java的做法与其他语言中的真实closures相反。