2011-07-12 30 views
6

可能重复:
Cannot refer to a non-final variable inside an inner class defined in a different method为什么java在内部匿名类中引用非最终变量是不可能的?

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

+0

看看这篇文章,它可能会有所帮助:http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-在不同的 – mandubian

+1

回答这里:http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-different – Jacob

+0

@cularis,我已经看过它,但由于编辑它不清楚什么答案考虑正确。 – dhblah

回答

3

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

Java的做法与其他语言已知的实际closures相反。

+2

因为我看到它,禁止存在这样的错觉,即保持匿名类直接使用变量而不是副本,并避免人们有错误的期望。 –

+0

Michael:确切地说 –

+0

感谢您的回答,但我不确定该变量是否被复制,因为您可以完美地传递最终变量,然后在匿名内部更改其中一个字段,并且该变化将在封闭方法中可见。 – dhblah

相关问题