無名クラスからアクセスできる変数

無名クラスの中からアクセスできる変数は

  • クラス変数
  • final宣言されているメソッド変数
public class Sample
{
	private int a = 0;
	private static int b;
	
	String test() {
		int c = 0;
		final int d = 0;
		return new String() {
			public String toString() {
				int e = 0;
				e = a;	// OK
				e = b;	// OK
				e = c;	// NG
				e = d;	// OK
				return "";
			}
		};
	}
}

finalつければメソッド変数にもアクセスできるってのを知った時は目から鱗だった。でも、確かにこれ出来ないと無名クラスの使い勝手が悪すぎるよなぁ。
新しいクラスを作りたくなくて悩んでたんだけどこれで無事解決!