final修飾子のないローカル変数に匿名クラスからアクセスできるようになる?

MYCOMも取り上げたなぁ。

そして、関数型に指定できる関数値を作成する方法として、ローカル関数以外にもうひとつ方法を導入したいとしている。これがクロージャだ。先の説明で「関数型に名前を付与する唯一の方法としてローカル関数を導入」とした。ではクロージャはなにかといえば、名前のないローカル関数である。匿名ローカル関数、これがJavaにおけるクロージャである。クロージャの記述例をみるとわかりやすい。

クロージャって無名なのが重要なのではなく定義時のレキシカルコンテキストを内包していることでは?WikipediaにもIn programming languages, a closure is a function that refers to free variables in its lexical context.って書いてあるし。
でも、この Proposal は確かに、名前付きの関数定義を Local Functions、匿名の関数定義を Anonymous Functions (Closures) とか書いてたりする。その定義はどうなんだろう。
で、もしかしたらローカル変数へのアクセスは従来どおり final 修飾子が必要なのかと一瞬思ったんだけど。

Names that are in scope where a function or closure is defined may be referenced within the closure. We do not propose a rule that requires referenced variables be final, as is currently required for anonymous class instances. The constraint on anonymous class instances is also relaxed to allow them to reference any local variable in scope.

ということで、ローカル関数/匿名関数(クロージャ)ともに、final 修飾子のないローカル変数にアクセスできる様。そして何気に匿名クラスのインスタンスも全てのローカル変数を参照できるようになるとか書いてるし。今気づいたよ。