なぜ、内部クラス(ローカルクラス、匿名クラス)からアクセス可能なローカル変数が final でなければならないのか、 その理由が次の記事に説明されている。 いまさらだけど、Java言語にはクロージャーがない - 達人プログラマーを目指して しかし、 つまり、以下のプログラムを考えてみれば内部クラス中からアクセスするローカル変数がfinalでなくてはならない理由が納得ができます。 とあるが、残念ながら、例示されているプログラムでは納得することはできない。 以下がそのプログラム。 public Test createTest(final int param) { final String value = "Hello"; // finalでないと // value = "Hello2"; // param = 3; // などの再代入が可能で結果が矛盾する。 return new Test()