Gangmax Blog

Why a Java Anonymous Inner class Can Only Access Final Outside Variables

From here.

简单说来,问题出在:Java在匿名内部类中“部分地”实现了闭包。所谓部分,指的是:传给匿名内部类的外部变量是“capture by value”的,而不是“capture by reference”。在这种情况下,如果在内部类中试图修改外部变量,其结果并不能真正修改外部变量的实际值。这就造成了程序语义和实际结果的冲突。为了解决这个冲突,在Java的语言层面强制加上了”匿名内部类的参数引用必须是final”这个限制,这样就做到了程序语义和实际结果的一致。

换句话说,如果Java支持了完整的闭包,则这项限制就没有必要了。然而当时Java为什么不考虑支持完整的闭包呢?

Comments