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

dhb*_*lah 6 java closures inner-classes

可能重复:
不能引用在不同方法中定义的内部类中的非final变量

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

Mat*_*arz 3

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

Java 的做法与其他语言中已知的真正闭包相反。

  • 在我看来,这一禁令的存在是为了维持匿名类直接使用变量而不是副本的错觉,并避免人们产生错误的期望。 (2认同)