ローカルな内部クラスのインスタンスのライフタイム(生成されてからGCされるまでの期間)は、 それを宣言するブロックやメソッドのライフタイムより長いことがあり、 その場合、内部クラスから参照しているローカル変数や引数が実際に参照を行なう タイミングまで存在し続けていないことがあります。 そういったケースでも正しく値が参照できることを保証するため、 参照可能なものを内部クラスが生成される時点以降に値が変更されないもの、 すなわち、final宣言されているローカル変数や引数のみに制限し、 その値をコピーしてインスタンス内部に保持するようになっています。 {{category2 プログラミング言語,Java}}